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

陇南网站建设网站建设包含那些 内容

陇南网站建设,网站建设包含那些 内容,南昌专业做网站公司,wordpress做的学校网站同学你好#xff01;本文章于2021年末编写#xff0c;获得广泛的好评#xff01; 故在2022年末对本系列进行填充与更新#xff0c;欢迎大家订阅最新的专栏#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现#xff0c; Pytorch深度学习理论篇(2023版)目录地址…  同学你好本文章于2021年末编写获得广泛的好评 故在2022年末对本系列进行填充与更新欢迎大家订阅最新的专栏获取基于Pytorch1.10版本的理论代码(2023版)实现 Pytorch深度学习·理论篇(2023版)目录地址为 CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例从可解释性的角度对深度学习的原理进行讲解与分析通过将深度学习知识与Pytorch的高效结合帮助各位新入门的读者理解深度学习各个模板之间的关系这些均是在Pytorch上实现的可以有效的结合当前各位研究生的研究方向设计人工智能的各个领域是经过一年时间打磨的精品专栏https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇 以下为2021版原文~~~~ 1 批量归一化理论 1.1 批量归一化原理 1.2 批量归一化定义 将每一层运算出来的数据归一化成均值为0、方差为1的标准高斯分布。这样就会在保留样本的分布特征又消除了层与层间的分布差异。 在实际应用中批量归一化的收敛非常快并且具有很强的泛化能力某种情况下可以完全代替前面讲过的正则化、Dropout。 在训练过程中会通过优化器的反向求导来优化出合适的rβ值。BN层计算每次输入的均值与方差并进行移动平均。移动平均默认的动量值为0.1。 在验证过程中会使用训练求得的均值和方差对验证数据做归一化处理。 1.3 批量归一化实现 BatchNorm1d对二维或三维的线性数据进行批量归一化处理输入形然是[N,D]或者[D,N,L](N代表批次数D代表数据的个数L代表数据的长度)。BatchNorm2d对二维的平面数据进行批量归一化处理输入形然是以[N,C,H,W](N代表批次数C代表通道数H代表亮度W代表宽度)。BatchNorm3d对三维的立体数据进行批量归一化处理输入形状是[N,C,D,H,W](N代表批次数C代表通道数D代表深度H代表高度W代表宽度)。 2 批量归一化实操 torch.nn.BatchNormld(num_features,eps1e-05,momentum0.1,affineTrue,trackrunning_statsTrue) 其中的参数含义如下。 num features待处理的输入数据的特征数该值需要手动计算如果输入数据的形状是[N,D](N代表批次数D代表数据的个数)那么该值为D。如果是在BatchNorm2d中那么该参数要填入图片的通道数。s默认值为1e-5。为保证数值稳定性分母不取0给分母加上值即给式(7-11)中的σ加上eps。momentum动态均值和动态方差使用的动量默认值为0.1。affine是否使用自适应模式。如果参数值设置为True,那么使用自适应模式系统将自动对式(7-11)中的r、β值进行优化学习如果参数值设置为Flase那么不使用自适应模型相当于将式7-11)中的r、β去掉。track_running stats是否跟踪当前批次数据的统计特性。在训练过程中如果参数值设置为False那么系统只使用当前批次数据的均值和方差如果参数值设置为True,那么系统将跟踪每批次输入的数据并实时更新整个数据集的均值和方差。在使用过程中该参数值一般设置为True,表示系统将使用训练时的均值和方差。)3 批量归一化函数的手动代码实现 3.0 使用批量归一化方法的注意事项 1、批量归一化方法不能紧跟在Dropout,层后面使用若有这种情况Dropout层的结果会改变批量归一化所计算的数据分布导致批量归一化后的偏差更大。2、在批量归一化方法与Switch激活函数一起使用时需要对Switch激活函数进行权值缩放可以使用缩放参数自学习的方法否侧则会引起更大的抖动。3、批量归一化方法对拟次依赖严重即对于较小批次效果并不理想。因为批量归一化侧重的是对批次样本的归一化当输入批次较小时个体样本将无法代替批次样本的特征导致模型抖动难以收敛。4、批量归一化方法适用深层网络。因为在浅层网络中内部协变量转移问题并不明显所以批量归一化的效果也不明显。 3.1 使用接口调用方式实现批量归一化计算 实例描述以二维的平面数据为例调用BN接口对一组数据执行批量归一化算法并将该计算结果与手动方式计算的结果进行比较。 import torch import torch.nn as nn# 1.1 使用接口调用的方式实现批量归一化计算 data torch.randn(2,2,2,1) # 定义一个形状为[2,2,2,1]的模拟数据批次中的样本数为2每个样本的通道数为2高和宽分别为2和1。 print(data) # 输出模拟数据 # 实例化BatchNorm2d接口并调用该实例化对象对模拟数据进行批量归一化计算。 obn nn.BatchNorm2d(2,affineTrue) # 实例化自适应BN对象 print(obn.weight) # 输出自适应参数 r print(obn.bias) # 输出自适应参数β print(obn.eps) # 输出BN中的epsoutput obn(data) # 计算BN print(output,output.size()) # 输出BN结果及形状 # 两个模拟样本数据每个样本都有两个通道 tensor([[[[-1.3640], [ 0.7662]],[[ 1.0771], [ 0.4655]]],            [[[-1.4258], [ 1.0477]],[[-0.1646],[ 1.6063]]]]) # 自适应参数 Parameter containing:tensor([1., 1.], requires_gradTrue) Parameter containing:tensor([0., 0.], requires_gradTrue) 1e-05 # 批量归一化结果及形状》仅改变输入数据的值没有修改输入数据的形状 tensor([[[[-0.9694],[ 0.8743]], [[ 0.4994],[-0.4232]]],  [[[-1.0228], [ 1.1179]], [[-1.3738], [ 1.2977]]]], grad_fnNativeBatchNormBackward0) torch.Size([2, 2, 2, 1]) 3.2 使用手动方式实现归一化计算 3.2.1 方差计算与贝塞尔校正 方差的计算方法是先将每个值减去均值的结果后再求平方并求它们的均值求和后除以总数量。贝塞尔校正(Bessels Correction)是一个与统计学的方差和标准差相关的修正方法是指在计算提示样本的方差和标准差时将分母中的n替换成n-1。这种修正方法得到的方差和标准差更近似于当前样本所在的总体集合中的方差和标准差。 3.2.2 归一化实验 为了使手动计算批量归一化的步骤更加清晰这里只对模拟数据中第一个样本中的第一个具体数据进行手动批量归一化计算具体步骤如下 (1)取出模拟数据中两个样本的第一个通道数据(2)用手动的方式计算该数据均值和方差(3)将均值和方差代入式(7-11)对模拟数据中第一个样本中的第一个具体数据进行计算具体代码如下。 mport torch# 1.2 使用手动方式实现批量归一化计算 print(第1通道的数据,data[:,0])# 计算第1通道数据的平均值与方差 Mean torch.Tensor.mean(data[:,0]) Var torch.Tensor.var(data[:,0],False) print(均值,Mean) print(方差,Var)# 计算第1通道中第一个数据的BN结果 batchnorm ((data[0][0][0][0] - Mean)/(torch.pow(Var,0.5)obn.eps)) * obn.weight[0]obn.bias[0] print(BN结果,batchnorm) 输出 第1通道的数据 tensor([[[-1.3640],[ 0.7662]], [[-1.4258], [1.0477]]]) 均值 tensor(-0.2440) 方差 tensor(1.3350) BN结果 tensor(-0.9694, grad_fnAddBackward0) 4 通过批量归一化方法改善模型的过拟合状况 修改第1篇文章中的# 2 搭建网络模型部分  # 2 搭建网络模型 # model LogicNet(inputdim2,hiddendim500,outputdim2) # 实例化模型增加拟合能力将hiddendim赋值为500 # 修改为 class Logic_Dropout_Net(LogicNet):def __init__(self,inputdim,hiddendim,outputdim):super(Logic_Dropout_Net, self).__init__(hiddendimhiddendim)def forward(self,x):x self.Linear1(x)x torch.tanh(x)x self.BN(x)x self.Linear2(x)return x model Logic_Dropout_Net(inputdim2,hiddendim500,outputdim2) # 初始化模型 optimizer torch.optim.Adam(model.parameters(),lr0.01) # 定义优化器:反向传播过程中使用。# 3 训练模型训练过程loss可视化 xt torch.from_numpy(X).type(torch.FloatTensor) # 将numpy数据转化为张量 yt torch.from_numpy(Y).type(torch.LongTensor) # 将numpy数据转化为张量 epochs 200 # 定义迭代次数 losses [] # 损失值列表 4.2 批量归一化方法改善模型---代码总览 Over_fitting_Batch normalization.py # 2 搭建网络模型 # model LogicNet(inputdim2,hiddendim500,outputdim2) # 实例化模型增加拟合能力将hiddendim赋值为500 # 修改为 class Logic_Dropout_Net(LogicNet):def __init__(self,inputdim,hiddendim,outputdim): # 初始化网络结构super(Logic_Dropout_Net, self).__init__(inputdim,hiddendim,outputdim)self.BN nn.BatchNorm1d(hiddendim) # 定义BN层def forward(self,x): # 搭建两个全连接层组成的网络模型x self.Linear1(x) # 将输入数据传入第1层x torch.tanh(x) # 对第1层的结果进行非线性变换x self.BN(x) # 对第1层的数据做BN处理x self.Linear2(x) # 将数据传入第2层return x model Logic_Dropout_Net(inputdim2,hiddendim500,outputdim2) # 初始化模型 optimizer torch.optim.Adam(model.parameters(),lr0.01) # 定义优化器:反向传播过程中使用。# 3 训练模型训练过程loss可视化 xt torch.from_numpy(X).type(torch.FloatTensor) # 将numpy数据转化为张量 yt torch.from_numpy(Y).type(torch.LongTensor) # 将numpy数据转化为张量 epochs 200 # 定义迭代次数 # 带有批量归一化处理的模型比带有Dropout处理的模型需要更少的训练次教。因为Dropout每次都会使一部分节点不参与运算相当于减少了单次的样本处理量所以带有Dropout处理的模型需要更多的训练次数才可以使模型收敛。 losses [] # 损失值列表 LogicNet_fun.py import sklearn.datasets import torch import numpy as np import matplotlib.pyplot as plt from torch import nnfrom LogicNet_fun import LogicNet,moving_average,predict,plot_decision_boundary# 1 构建数据集 np.random.seed(0) # 设置随机数种子 X , Y sklearn.datasets.make_moons(40,noise0.2) # 生成两组半圆形数据 arg np.squeeze(np.argwhere(Y0),axis1) # 获取第1组数据索引 arg2 np.squeeze(np.argwhere(Y1),axis1) # 获取第2组数据索引 # 显示数据 plt.title(train moons data) plt.scatter(X[arg,0],X[arg,1],s100,cb,marker,label data1) plt.scatter(X[arg2,0],X[arg2,1],s40,cr,markero,label data2) plt.legend() plt.show()# 2 搭建网络模型 # model LogicNet(inputdim2,hiddendim500,outputdim2) # 实例化模型增加拟合能力将hiddendim赋值为500 # 修改为 class Logic_Dropout_Net(LogicNet):def __init__(self,inputdim,hiddendim,outputdim): # 初始化网络结构super(Logic_Dropout_Net, self).__init__(inputdim,hiddendim,outputdim)self.BN nn.BatchNorm1d(hiddendim) # 定义BN层def forward(self,x): # 搭建两个全连接层组成的网络模型x self.Linear1(x) # 将输入数据传入第1层x torch.tanh(x) # 对第1层的结果进行非线性变换x self.BN(x) # 对第1层的数据做BN处理x self.Linear2(x) # 将数据传入第2层return x model Logic_Dropout_Net(inputdim2,hiddendim500,outputdim2) # 初始化模型 optimizer torch.optim.Adam(model.parameters(),lr0.01) # 定义优化器:反向传播过程中使用。# 3 训练模型训练过程loss可视化 xt torch.from_numpy(X).type(torch.FloatTensor) # 将numpy数据转化为张量 yt torch.from_numpy(Y).type(torch.LongTensor) # 将numpy数据转化为张量 epochs 200 # 定义迭代次数 # 带有批量归一化处理的模型比带有Dropout处理的模型需要更少的训练次教。因为Dropout每次都会使一部分节点不参与运算相当于减少了单次的样本处理量所以带有Dropout处理的模型需要更多的训练次数才可以使模型收敛。 losses [] # 损失值列表for i in range(epochs):loss model.getloss(xt,yt)losses.append(loss.item()) # 保存损失值中间状态optimizer.zero_grad() # 清空梯度loss.backward() # 反向传播损失值optimizer.step() # 更新参数 avgloss moving_average(losses) # 获得损失值的移动平均值 plt.figure(1) plt.subplot(211) plt.xlabel(step number) plt.ylabel(Training loss) plt.title(step number vs Training loss) plt.show()# 4 模型结果可视化观察过拟合现象 plot_decision_boundary(lambda x: predict(model,x),X,Y) from sklearn.metrics import accuracy_score print(训练时的准确率,accuracy_score(model.predict(xt),yt)) # 重新生成两组半圆数据 Xtest,Ytest sklearn.datasets.make_moons(80,noise0.2) plot_decision_boundary(lambda x: predict(model,x),Xtest,Ytest) Xtest_t torch.from_numpy(Xtest).type(torch.FloatTensor) # 将numpy数据转化为张量 Ytest_t torch.from_numpy(Ytest).type(torch.LongTensor) print(测试时准确率,accuracy_score(model.predict(Xtest_t),Ytest_t)) 4.3 小结 批量归一化更擅长解决深层网络的内部协变量转移问题在深层网路中才会体现出更好的性能。 5 扩展多种批量归一化算法介绍 在小批次样本情况下可以使用与批次无关的renorm方法进行批量归一化在RNN模型中可以使用Layer Normalization算法在对抗神经网络中可以使用Instance Normalization算法Switchable Normalization算法它可以将多种批量归一化算法融合并赋予可以学习的权重在使用时通过模型训练的方法来自动学习。
http://www.yutouwan.com/news/100231/

相关文章:

  • php整站开发 企业网站教程建设网站的程序
  • 美的企业微信网站公司o2o网站建设
  • 农机网站建设目标随申行是国企嘛?
  • 用python做网站优点网站人多怎么优化
  • wordpress易语言seo推广培训费用
  • 网站流量评价有哪几方面撰写网络推广策划案
  • 网站调研方法有哪些内容wordpress编辑新页面
  • 永川网站建设熊掌号网站建设情况存在问题
  • 上海高端网站花蝴蝶免费视频在线观看高清版
  • 在哪注册网站一个做智能化的网站有哪些
  • 建设网站设计论文范文宁波免费自助建站模板
  • 福清市建设局网站网站可以多个域名吗
  • 什么网站做博客好如何做表白网站的教程
  • 长安营销服务协同管理平台网站ps怎么网站首页
  • 网站开发名词解释室内设计效果图一套
  • 济南做网站建设公司新乡网站开发的公司
  • 做网站备案实名需要钱吗长垣建设银行网站
  • 中小型网站建设 教案微信代运营公司有哪些
  • 西安响应式网站开发金戈枸橼酸西地那非片
  • 成都建设网站专业公司电子游戏十大正规官方网址
  • 建设企业网站公司网络举报网站
  • 企业官网模板站网站制作公司怎么看
  • 广州专业网站优化公司怎么建设菠菜网站
  • 莱芜网站网站建设引流人脉推广软件
  • 刘家窑网站建设51我们一起做网站
  • 优秀图网站青岛知名设计公司
  • 西安哪些做网站的公司好专做生存设计的网站
  • 电子书新手学做网站公司网站二维码生成器
  • 网站个人备案模版wordpress安装通知栏
  • 湖南长沙网站建设公司网建会