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

东莞高埗网站建设广东计算机网页制作

东莞高埗网站建设,广东计算机网页制作,足球比赛统计数据,管理网站怎么做模型参数的初始化与访问操作 学习 如何初始化以及访问模型参数#xff0c;以及如何在多层之间共享模型参数 首先定义一个含有单个隐藏层的多层感知机#xff0c;使用默认方式初始化该模型的参数#xff0c;并且进行一次前向计算#xff1a; import torch from torch impo…模型参数的初始化与访问操作 学习 如何初始化以及访问模型参数以及如何在多层之间共享模型参数 首先定义一个含有单个隐藏层的多层感知机使用默认方式初始化该模型的参数并且进行一次前向计算 import torch from torch import nn from torch.nn import initnet nn.Sequential(nn.Linear(4, 3), nn.ReLU(), nn.Linear(3, 1)) # pytorch已进行默认初始化print(net) X torch.rand(2, 4) Y net(X).sum()输出 Sequential((0): Linear(in_features4, out_features3, biasTrue)(1): ReLU()(2): Linear(in_features3, out_features1, biasTrue) )接着尝试访问模型参数 由于Sequentail类与Module类的继承关系可以通过Module类的parameters()函数或者named_parameters()来访问所有的参数 print(type(net.named_parameters())) for name, param in net.named_parameters():print(name, param.size())输出 named_parameters()返回参数的名称以及其该参数值tensor变量 class generator 0.weight torch.Size([3, 4]) 0.bias torch.Size([3]) 2.weight torch.Size([1, 3]) 2.bias torch.Size([1])其中“0“、”2“为层数索引我们可以通过下面的方法访问网络的任意一层 for name, param in net[0].named_parameters():print(name, param.size(), type(param))输出结果 weight torch.Size([3, 4]) class torch.nn.parameter.Parameter bias torch.Size([3]) class torch.nn.parameter.Parameter由于我们采用了下标索引访问网络的某一层所以结果中没有了层数索引返回的参数类型为“torch.nn.parameter.Parameter”这是Tensor的子类需要注意的是如果一个Tensor是Parameter他就会自动被添加到模型的参数列表中。 我们可以用下面的例子来理解 class MyModel(nn.Module):def __init__(self, **kwargs):super(MyModel, self).__init__(**kwargs)self.weight1 nn.Parameter(torch.rand(20, 20))self.weight2 torch.rand(20, 20)def forward(self, x):passn MyModel() for name, param in n.named_parameters():print(name)输出 weight1发现只输出了参数weight1但是没有输出参数weight2这说明参数weight1在参数列表中而参数weight2不在参数列表中 初始化模型参数 将权重参数初始化成均值为0、标准差为0.01的正态分布随机数并依然将偏差参数清零 for name, param in net.named_parameters():if weight in name:init.normal_(param, mean0, std0.01)print(name, param.data)for name, param in net.named_parameters():if bias in name:init.constant_(param, val0)print(name, param.data)我们查看torch.nn.init.normal_函数观察torch默认初始化的方式 def normal_(tensor, mean0, std1):with torch.no_grad():return tensor.normal_(mean, std)这里使用一个inplace改变Tensor的值这个过程不记录梯度 根据相同的实现方式我们来实现一个自定义的初始化方法。在下面的例子里我们令权重有一半概率初始化为0有另一半概率初始化为[−10,−5][-10,-5][−10,−5]和[5,10][5,10][5,10]两个区间里均匀分布的随机数。 def init_weight_(tensor):with torch.no_grad():tensor.uniform_(-10, 10)tensor * (tensor.abs() 5).float()for name, param in net.named_parameters():if weight in name:init_weight_(param)我们还可以使用在之前的blog中提到的改变Parameter的data属性来改写模型参数的同时不改变参数的梯度 for name, param in net.named_parameters():if bias in name:param.data 1print(name, param.data)这里通过param.data改变模型参数但是不会影响param的梯度。 共享模型的参数 如何实现在多层之间共享模型的参数 1对Sequential中传入同一个Module实例这两个层的参数是共享的 linear nn.Linear(1, 1, biasFalse) net nn.Sequential(linear, linear) print(net) for name, param in net.named_parameters():init.constant_(param, val3)print(name, param.data)输出 Sequential((0): Linear(in_features1, out_features1, biasFalse)(1): Linear(in_features1, out_features1, biasFalse) ) 0.weight tensor([[3.]])根据输出结果可以发现网络有两层但是weight参数只有一个这时候这两个层共享参数。 因为模型参数包含了梯度所以在反向传播计算时这些共享参数的梯度是累加的 x torch.ones(1, 1) y net(x).sum() print(y) y.backward() print(net[0].weight.grad) # 单次梯度是3两次所以就是6weight的值在上面输出了是3输出 tensor(9., grad_fnSumBackward0) tensor([[6.]])
http://www.zqtcl.cn/news/746734/

相关文章:

  • php做不了大型网站深圳公司注册网址官方
  • 网站副标题怎么写杭州抖音代运营
  • 网站建设基本资料网站数据库连接出错
  • 娄底网站开发温州seo排名公司
  • 成都有哪些网站开发公司最新网推项目
  • 分享公众号的网站小型企业类网站开发公司
  • 青岛网站建设方案案例wordpress主题模板 国人
  • 哪家高端网站建设好贷款织梦网站模板
  • 北京网站建设公司价格最近中文字幕2018免费版2019
  • 帮人做设计的网站自己怎么做新闻开头视频网站
  • 网站开发搜索功能中国建设银行ie下载网站
  • 中山网站建设 骏域网站的形式有哪些
  • 深圳企业网站重庆建站塔山双喜
  • 征婚网站 女 做茶叶生意企业网站推广服务协议
  • 安徽省住房城乡建设厅网站官网英语机构网站建设方案
  • 电商建站价格深圳龙岗建站公司
  • 可以下载源程序的网站.htaccess wordpress
  • 国内优秀设计网站小程序推广方案
  • 网站构建是什么意思怎么做网站盗号
  • 学校网站建设行业现状wordpress怎么保存图片
  • 网站 框架网页建设title:(网站建设)
  • 素材网站推广方案安卓端开发
  • 网站制作可以询价么168推广
  • 河南城乡和住房建设厅网站网络营销的主要特点有哪些
  • 哪些网站可以做自媒体wordpress 左侧
  • joomla! 1.5 网站建设基础教程丹阳网站推广
  • 中国建设银行山东省分行网站怎么做网站制作
  • 网站前台设计方案自助建站一般适用于大型电子商务网站建设
  • 建设银行不良资产处置网站wordpress啥时候出现的
  • 出口贸易网站网站建设及解决方案