如何解析Pytorch基础中网络参数初始化问题
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,如何解析Pytorch基础中网络参数初始化问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。参数访问和遍历:对于模型参数
千家信息网最后更新 2025年12月02日如何解析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安全错误
数据库的锁怎样保障安全
经营范围计算机网络技术
计算机网络技术基础教材下载
闵行区会计软件开发怎么样
质量可靠的mysql数据库调优
终端接入需要什么数据库
linux刷新数据库缓存
感知数据库中的关键技术
msql数据库建表
微信无法连接到服务器是怎么回事
手机应用软件开发例程
数据中心服务器和本地服务器
戴尔服务器中文版虚拟技术
深圳中仕软件开发有限公司
铁路网络安全和信息化工作汇报
杭州电脑软件开发工程师
饰品搭配软件开发
天津gps时钟服务器虚拟主机
数据库实现路径查询
云服务器 网盘
番禺游戏软件开发
丽水工业软件开发设计
软件开发培训单位
dbf数据库怎么用
武汉java软件开发公司
下载数据库大全
蜀山区网络技术价格咨询
网络安全简要5点分析
深圳团帮科技互联网有限公司
王牌战争海岛服务器下载
天津rust服务器托管虚拟主机