当前位置: 首页 > news >正文

如何建造网站视频教程企业网站制作 深圳

如何建造网站视频教程,企业网站制作 深圳,关键词搜索广告,莱芜网站制作哪家好文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正#xff1a;动量法Momen… 文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正动量法Momentum4. 自适应学习率RMSprop算法 5. Adam算法更新公式算法实现算法测试 6. 代码整合 ​ 任何数学技巧都不能弥补信息的缺失。 ——科尼利厄斯·兰佐斯Cornelius Lanczos匈牙利数学家、物理学家 一、实验介绍 深度神经网络在机器学习中应用时面临两类主要问题优化问题和泛化问题。 优化问题深度神经网络的优化具有挑战性。 神经网络的损失函数通常是非凸函数因此找到全局最优解往往困难。深度神经网络的参数通常非常多而训练数据也很大因此使用计算代价较高的二阶优化方法不太可行而一阶优化方法的训练效率通常较低。深度神经网络存在梯度消失或梯度爆炸问题导致基于梯度的优化方法经常失效。 泛化问题由于深度神经网络的复杂度较高且具有强大的拟合能力很容易在训练集上产生过拟合现象。因此在训练深度神经网络时需要采用一定的正则化方法来提高网络的泛化能力。 目前研究人员通过大量实践总结了一些经验方法以在神经网络的表示能力、复杂度、学习效率和泛化能力之间取得良好的平衡从而得到良好的网络模型。本系列文章将从网络优化和网络正则化两个方面来介绍如下方法 在网络优化方面常用的方法包括优化算法的选择、参数初始化方法、数据预处理方法、逐层归一化方法和超参数优化方法。在网络正则化方面一些提高网络泛化能力的方法包括ℓ1和ℓ2正则化、权重衰减、提前停止、丢弃法、数据增强和标签平滑等。 本文将介绍基于自适应学习率的优化算法Adam算法详解Adam≈梯度方向优化Momentum自适应学习率RMSprop 二、实验环境 本系列实验使用了PyTorch深度学习框架相关操作如下 1. 配置虚拟环境 conda create -n DL python3.7 conda activate DLpip install torch1.8.1cu102 torchvision0.9.1cu102 torchaudio0.8.1 -f https://download.pytorch.org/whl/torch_stable.htmlconda install matplotlibconda install scikit-learn2. 库版本介绍 软件包本实验版本目前最新版matplotlib3.5.33.8.0numpy1.21.61.26.0python3.7.16scikit-learn0.22.11.3.0torch1.8.1cu1022.0.1torchaudio0.8.12.0.2torchvision0.9.1cu1020.15.2 三、实验内容 0. 导入必要的库 import torch import torch.nn.functional as F from d2l import torch as d2l from sklearn.datasets import load_iris from torch.utils.data import Dataset, DataLoader1. 随机梯度下降SGD算法 随机梯度下降Stochastic Gradient DescentSGD是一种常用的优化算法用于训练深度神经网络。在每次迭代中SGD通过随机均匀采样一个数据样本的索引并计算该样本的梯度来更新网络参数。具体而言SGD的更新步骤如下 从训练数据中随机选择一个样本的索引。使用选择的样本计算损失函数对于网络参数的梯度。根据计算得到的梯度更新网络参数。重复以上步骤直到达到停止条件如达到固定的迭代次数或损失函数收敛。 a. PyTorch中的SGD优化器 Pytorch官方教程 optimizer torch.optim.SGD(model.parameters(), lr0.2)b. 使用SGD优化器的前馈神经网络 【深度学习实验】前馈神经网络final自定义鸢尾花分类前馈神经网络模型并进行训练及评价 2.随机梯度下降的改进方法 传统的SGD在某些情况下可能存在一些问题例如学习率选择困难和梯度的不稳定性。为了改进这些问题提出了一些随机梯度下降的改进方法其中包括学习率的调整和梯度的优化。 a. 学习率调整 学习率衰减Learning Rate Decay随着训练的进行逐渐降低学习率。常见的学习率衰减方法有固定衰减、按照指数衰减、按照时间表衰减等。Adagrad自适应地调整学习率。Adagrad根据参数在训练过程中的历史梯度进行调整对于稀疏梯度较大的参数降低学习率对于稀疏梯度较小的参数增加学习率。这样可以在不同参数上采用不同的学习率提高收敛速度。Adadelta与Adagrad类似但进一步解决了Adagrad学习率递减过快的问题。Adadelta不仅考虑了历史梯度还引入了一个累积的平方梯度的衰减平均以动态调整学习率。RMSprop也是一种自适应学习率的方法通过使用梯度的指数加权移动平均来调整学习率。RMSprop结合了Adagrad的思想但使用了衰减平均来减缓学习率的累积效果从而更加稳定。 b. 梯度估计修正 Momentum使用梯度的“加权移动平均”作为参数的更新方向。Momentum方法引入了一个动量项用于加速梯度下降的过程。通过积累之前的梯度信息可以在更新参数时保持一定的惯性有助于跳出局部最优解、加快收敛速度。Nesterov accelerated gradientNesterov加速梯度NAG是Momentum的一种变体。与Momentum不同的是NAG会先根据当前的梯度估计出一个未来位置然后在该位置计算梯度。这样可以更准确地估计当前位置的梯度并且在参数更新时更加稳定。梯度截断Gradient Clipping为了应对梯度爆炸或梯度消失的问题梯度截断的方法被提出。梯度截断通过限制梯度的范围将梯度控制在一个合理的范围内。常见的梯度截断方法有阈值截断和梯度缩放。 3. 梯度估计修正动量法Momentum 【深度学习实验】网络优化与正则化一优化算法使用动量优化的随机梯度下降算法Stochastic Gradient Descent with Momentum def init_momentum_states(feature_dim):v_w torch.zeros((feature_dim, 3))v_b torch.zeros(3)return (v_w, v_b)def sgd_momentum(params, states, hyperparams):for p, v in zip(params, states):with torch.no_grad():v[:] hyperparams[momentum] * v p.gradp[:] - hyperparams[lr] * vp.grad.data.zero_() 4. 自适应学习率 【深度学习实验】网络优化与正则化二基于自适应学习率的优化算法详解Adagrad、Adadelta、RMSprop RMSprop算法 RMSpropRoot Mean Square Propagation算法是一种针对Adagrad算法的改进方法通过引入衰减系数来平衡历史梯度和当前梯度的贡献。它能够更好地适应不同参数的变化情况对于非稀疏数据集表现较好。 def init_rmsprop_states(feature_dim):s_w torch.zeros((feature_dim, 3))s_b torch.zeros(3)return (s_w, s_b)def rmsprop(params, states, hyperparams):gamma, eps hyperparams[gamma], 1e-6for p, s in zip(params, states):with torch.no_grad():s[:] gamma * s (1 - gamma) * torch.square(p.grad)p[:] - hyperparams[lr] * p.grad / torch.sqrt(s eps)p.grad.data.zero_() 5. Adam算法 Adam算法Adaptive Moment Estimation Algorithm[Kingma et al., 2015]可以看作动量法和 RMSprop 算法的结合不但使用动量作为参数更新方向而且可以自适应调整学习率。 更新公式 算法实现 def init_adam_states(feature_dim):v_w, v_b torch.zeros((feature_dim, 3)), torch.zeros(3)s_w, s_b torch.zeros((feature_dim, 3)), torch.zeros(3)return ((v_w, s_w), (v_b, s_b))def adam(params, states, hyperparams):beta1, beta2, eps 0.9, 0.999, 1e-6for p, (v, s) in zip(params, states):with torch.no_grad():v[:] beta1 * v (1 - beta1) * p.grads[:] beta2 * s (1 - beta2) * torch.square(p.grad)v_bias_corr v / (1 - beta1 ** hyperparams[t])s_bias_corr s / (1 - beta2 ** hyperparams[t])p[:] - hyperparams[lr] * v_bias_corr / (torch.sqrt(s_bias_corr) eps)p.grad.data.zero_()hyperparams[t] 1 init_adam_states函数用于初始化Adam优化算法的状态。它接受一个特征维度feature_dim作为输入并返回包含权重和偏置项的状态变量((v_w, s_w), (v_b, s_b))。这些状态变量用于存储权重和偏置项的一阶矩估计动量和二阶矩估计RMSProp。 adam函数是Adam优化算法的主要实现部分它接受三个参数params待优化的参数states状态变量和hyperparams超参数。 在函数内部使用一个循环来遍历待优化的参数params和对应的状态变量states然后根据Adam算法的更新规则对每个参数进行更新 在更新过程中使用torch.no_grad()上下文管理器表示在更新过程中不会计算梯度。 根据Adam算法的公式计算动量和二阶矩估计的更新值并将其累加到对应的状态变量中。根据偏差修正公式计算修正后的动量和二阶矩估计。根据修正后的动量和二阶矩估计计算参数的更新量并将其应用到参数上。 使用p.grad.data.zero_()将参数的梯度清零以便下一次迭代时重新计算梯度。 在代码的最后hyperparams[t] 1用于更新迭代次数t的计数器。 算法测试 # batch_size 1 batch_size 24 # batch_size 120# 分别构建训练集、验证集和测试集 train_dataset IrisDataset(modetrain)train_loader DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue)lr 0.02 train(adam, init_adam_states(4), {lr: lr, t: 1}, train_loader, 4) IrisDataset类 参照前文【深度学习实验】前馈神经网络七批量加载数据直接加载数据→定义类封装数据 train函数 参照前文【深度学习实验】网络优化与正则化一优化算法使用动量优化的随机梯度下降算法Stochastic Gradient Descent with Momentum 6. 代码整合 import torch from torch import nn import torch.nn.functional as F import matplotlib.pyplot as plt from d2l import torch as d2l from sklearn.datasets import load_iris from torchvision.io import read_image from torch.utils.data import Dataset, DataLoaderclass FeedForward(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(FeedForward, self).__init__()self.fc1 nn.Linear(input_size, hidden_size)self.fc2 nn.Linear(hidden_size, output_size)self.act nn.Sigmoid()def forward(self, inputs):outputs self.fc1(inputs)outputs self.act(outputs)outputs self.fc2(outputs)return outputsdef evaluate_loss(net, data_iter, loss):评估给定数据集上模型的损失Defined in :numref:sec_model_selectionmetric d2l.Accumulator(2) # 损失的总和,样本数量for X, y in data_iter:X X.to(torch.float32)out net(X)# y d2l.reshape(y, out.shape)l loss(out, y.long())metric.add(d2l.reduce_sum(l), d2l.size(l))return metric[0] / metric[1]def train(trainer_fn, states, hyperparams, data_iter, feature_dim, num_epochs2):Defined in :numref:sec_minibatches# 初始化模型w torch.normal(mean0.0, std0.01, size(feature_dim, 3),requires_gradTrue)b torch.zeros((3), requires_gradTrue)# 训练模型animator d2l.Animator(xlabelepoch, ylabelloss,xlim[0, num_epochs], ylim[0.9, 1.1])n, timer 0, d2l.Timer()# 这是一个单层线性层net lambda X: d2l.linreg(X, w, b)loss F.cross_entropyfor _ in range(num_epochs):for X, y in data_iter:X X.to(torch.float32)l loss(net(X), y.long()).mean()l.backward()trainer_fn([w, b], states, hyperparams)n X.shape[0]if n % 48 0:timer.stop()animator.add(n / X.shape[0] / len(data_iter),(evaluate_loss(net, data_iter, loss),))timer.start()print(floss: {animator.Y[0][-1]:.3f}, {timer.avg():.3f} sec/epoch)return timer.cumsum(), animator.Y[0]def load_data(shuffleTrue):x torch.tensor(load_iris().data)y torch.tensor(load_iris().target)# 数据归一化x_min torch.min(x, dim0).valuesx_max torch.max(x, dim0).valuesx (x - x_min) / (x_max - x_min)if shuffle:idx torch.randperm(x.shape[0])x x[idx]y y[idx]return x, yclass IrisDataset(Dataset):def __init__(self, modetrain, num_train120, num_dev15):super(IrisDataset, self).__init__()x, y load_data(shuffleTrue)if mode train:self.x, self.y x[:num_train], y[:num_train]elif mode dev:self.x, self.y x[num_train:num_train num_dev], y[num_train:num_train num_dev]else:self.x, self.y x[num_train num_dev:], y[num_train num_dev:]def __getitem__(self, idx):return self.x[idx], self.y[idx]def __len__(self):return len(self.x)def init_adam_states(feature_dim):v_w, v_b torch.zeros((feature_dim, 3)), torch.zeros(3)s_w, s_b torch.zeros((feature_dim, 3)), torch.zeros(3)return ((v_w, s_w), (v_b, s_b))def adam(params, states, hyperparams):beta1, beta2, eps 0.9, 0.999, 1e-6for p, (v, s) in zip(params, states):with torch.no_grad():v[:] beta1 * v (1 - beta1) * p.grads[:] beta2 * s (1 - beta2) * torch.square(p.grad)# 偏差修正请在下方实现偏差修正的计算公式v_bias_corr v / (1 - beta1 ** hyperparams[t])s_bias_corr s / (1 - beta2 ** hyperparams[t])p[:] - hyperparams[lr] * v_bias_corr / (torch.sqrt(s_bias_corr) eps)p.grad.data.zero_()hyperparams[t] 1# batch_size 1 batch_size 24 # batch_size 120# 分别构建训练集、验证集和测试集 train_dataset IrisDataset(modetrain)train_loader DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue)lr 0.02 train(adam, init_adam_states(4), {lr:lr, t:1}, train_loader, 4, num_epochs200)
http://www.w-s-a.com/news/740494/

相关文章:

  • 制作网站用的域名网站域名注册信息查询
  • 公司域名查询官方网站女教师遭网课入侵直播录屏曝
  • 网站开发社交网络功能的作用腾讯公司网站
  • 网站建设需要微信账号和密码网站建设工作汇报
  • 国家城乡住房和建设部网站西安私人网站
  • 天津高端网站定制seo实战教程
  • 网站文章怎么做才能被快速收录网站备案核验系统
  • 子网站建设方案l建设银行网站
  • 免费看舆情网站网站备案用户名忘了怎么办
  • 地方门户网站的分类网站的方案
  • 沧州哪里做网站网站的建设是什么
  • 设计公司海报秦皇岛seo网站推广
  • 网站导航规划wordpress做漫画
  • jsp体育用品网站建设wordpress 10万篇文章
  • 沈阳做微信和网站的公司网站在线支付接口
  • 重庆整合网络营销百度seo快速提升排名
  • 设计师网站外网百度分析工具
  • 旅游网站建设技术解决方案wordpress主题安装后找不到
  • 网站图片文字排版错误管理系统界面设计
  • 网站建设 台州广州惠科互联网技术有限公司
  • 网站页面尺寸大小四川鸿业建设集团网站
  • 做女朋友的网站局网站建设方案word
  • 做阿里国际网站会有成效吗科技网站有哪些
  • 高端公司网站建设北京两学一做网站
  • 黄埔网站建设设计wordpress 文件夹改名
  • 怎么什么软件可以吧做网站最火的二十个电商app
  • wordpress theme sage网站seo优化加推广
  • 建设一个大型电影网站公司网站建设工作总结
  • 传奇网站一般怎么做的宇泽佛山网站建设
  • google网站入口电商运营十大基础知识