如何解析Pytorch基础中网络参数初始化问题
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,如何解析Pytorch基础中网络参数初始化问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。参数访问和遍历:对于模型参数
千家信息网最后更新 2025年02月05日如何解析Pytorch基础中网络参数初始化问题
如何解析Pytorch基础中网络参数初始化问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
参数访问和遍历:
对于模型参数,我们可以进行访问;
由于Sequential由Module继承而来,所以可以使用Module钟的parameter()或者named_parameters方法来访问所有的参数;
例如,对于使用Sequential搭建的网络,可以使用下列for循环直接进行遍历:
for name, param in net.named_parameters(): print(name, param.size())
当然,也可以使用索引来按层访问,因为本身网络也是按层搭建的:
for name, param in net[0].named_parameters(): print(name, param.size(), type(param))
当我们获取某一层的参数信息后,可以使用data()和grad()函数来进行值和梯度的访问:
weight_0 = list(net[0].parameters())[0]print(weight_0.data)print(weight_0.grad) # 反向传播前梯度为NoneY.backward()print(weight_0.grad)
参数初始化问题:
当我们参用for循环获取每层参数,可以采用如下形式对w和偏置b进行初值设定:
for name, param in net.named_parameters(): if 'weight' in name: init.normal_(param, mean=0, std=0.01) print(name, param.data)for name, param in net.named_parameters(): if 'bias' in name: init.constant_(param, val=0) print(name, param.data)
当然,我们也可以进行初始化函数的自定义设置:
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) print(name, param.data)
这里注意一下torch.no_grad()的问题;
该形式表示该参数并不随着backward进行更改,常常用来进行局部网络参数固定的情况;
如该连接所示:关于no_grad()
共享参数:
可以自定义Module类,在forward中多次调用同一个层实现;
如上章节的代码所示:
class FancyMLP(nn.Module): def __init__(self, **kwargs): super(FancyMLP, self).__init__(**kwargs) self.rand_weight = torch.rand((20, 20), requires_grad=False) # 不可训练参数(常数参数) self.linear = nn.Linear(20, 20) def forward(self, x): x = self.linear(x) # 使用创建的常数参数,以及nn.functional中的relu函数和mm函数 x = nn.functional.relu(torch.mm(x, self.rand_weight.data) + 1) # 复用全连接层。等价于两个全连接层共享参数 x = self.linear(x) # 控制流,这里我们需要调用item函数来返回标量进行比较 while x.norm().item() > 1: x /= 2 if x.norm().item() < 0.8: x *= 10 return x.sum()
所以可以看到,相当于同时在同一个网络中调用两次相同的Linear实例,所以变相实现了参数共享;
suo'yi注意一下,如果传入Sequential模块的多层都是同一个Module实例的话,则他们共享参数;
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
参数
网络
函数
问题
全连
实例
常数
形式
梯度
帮助
循环
基础
清楚
相同
两个
代码
信息
内容
初值
同时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发大学生怎么创业
欣网互联网科技有限公司产品
司法解释网络安全宣传周
huawei服务器
美国哮喘数据库
分布式服务器的路由器
pascal数据库
网络安全风险和威胁有哪些呢
.网络安全的基本属性是(
怎样查域名服务器
2022年网络安全教育直播课
功能软件开发路线
怎么删手机系统数据库
计算机网络技术设计题目
常州常规软件开发售后保障
在线制作带数据库网页
二调数据库图斑面积
如何从万方查数据库
英雄联盟服务器未响应
重庆网络安全审计系统咨询辅导
服务器阵列卡什么情况会坏
公安局新时期网络安全工作
保护数据库安全的常用方法
云浮石材商城软件开发
上海网络技术学院排名
云南网络安全中心
网络安全知识教育演讲稿
网络安全和道德的知识竞赛
access中 数据库的基础
游戏公司的软件开发系统