一. 访问模型参数

对于使用Sequential类构造的神经网络,我们可以通过方括号[]来访问网络的任一层。回忆一下上一节中提到的Sequential类与Block类的继承关系。
对于Sequential实例中含模型参数的层,我们可以通过Block类的params属性来访问该层包含的所有参数。
下面,访问多层感知机net中隐藏层的所有参数。索引0表示隐藏层为Sequential实例最先添加的层。

net[0].params, type(net[0].params)

可以看到,我们得到了一个由参数名称映射到参数实例的字典(类型为ParameterDict类)。其中权重参数的名称为dense0_weight,它由net[0]的名称(dense0_)和自己的变量名(weight)组成。而且可以看到,该参数的形状为(256, 20),且数据类型为32位浮点数(float32)。为了访问特定参数,我们既可以通过名字来访问字典里的元素,也可以直接使用它的变量名。下面两种方法是等价的,但通常后者的代码可读性更好。

net[0].params['dense0_weight'], net[0].weight

Gluon里参数类型为Parameter类,它包含参数和梯度的数值,可以分别通过data函数和grad函数来访问。因为我们随机初始化了权重,所以权重参数是一个由随机数组成的形状为(256, 20)的NDArray。

net[0].weight.data()

权重梯度

net[0].weight.grad()

输出层的偏差值。

net[1].bias.data()

最后,我们可以使用collect_params函数来获取net变量所有嵌套(例如通过add函数嵌套)的层所包含的所有参数。它返回的同样是一个由参数名称到参数实例的字典。

net.collect_params()

二. 初始化模型参数

权重参数元素为[-0.07, 0.07]之间均匀分布的随机数,偏差参数则全为0。但我们经常需要使用其他方法来初始化权重。MXNet的init模块里提供了多种预设的初始化方法。在下面的例子中,我们将权重参数初始化成均值为0、标准差为0.01的正态分布随机数,并依然将偏差参数清零。

# 非首次对模型初始化需要指定force_reinit为真
net.initialize(init=init.Normal(sigma=0.01), force_reinit=True)
net[0].weight.data()[0]

下面使用常数来初始化权重参数。

net.initialize(init=init.Constant(1), force_reinit=True)
net[0].weight.data()[0]

如果只想对某个特定参数进行初始化,我们可以调用Parameter类的initialize函数,它与Block类提供的initialize函数的使用方法一致。下例中我们对隐藏层的权重使用Xavier随机初始化方法。

net[0].weight.initialize(init=init.Xavier(), force_reinit=True)
net[0].weight.data()[0]

三. 共享模型参数

在有些情况下,我们希望在多个层之间共享模型参数。“模型构造”一节介绍了如何在Block类的forward函数里多次调用同一个层来计算。这里再介绍另外一种方法,它在构造层的时候指定使用特定的参数。如果不同层使用同一份参数,那么它们在前向计算和反向传播时都会共享相同的参数。在下面的例子里,我们让模型的第二隐藏层(shared变量)和第三隐藏层共享模型参数。

net = nn.Sequential()
shared = nn.Dense(8, activation='relu')
net.add(nn.Dense(8, activation='relu'),shared,nn.Dense(8, activation='relu', params=shared.params),nn.Dense(10))
net.initialize()X = nd.random.uniform(shape=(2, 20))
net(X)net[1].weight.data()[0] == net[2].weight.data()[0]

我们在构造第三隐藏层时通过params来指定它使用第二隐藏层的参数。因为模型参数里包含了梯度,所以在反向传播计算时,第二隐藏层和第三隐藏层的梯度都会被累加在shared.params.grad()里。

访问模型参数,初始化模型参数,共享模型参数方法相关推荐

  1. DL之DNN优化技术:DNN中参数初始化【Lecun参数初始化、He参数初始化和Xavier参数初始化】的简介、使用方法详细攻略

    DL之DNN优化技术:DNN中参数初始化[Lecun参数初始化.He参数初始化和Xavier参数初始化]的简介.使用方法详细攻略 导读:现在有很多学者认为,随着BN层的提出,权重初始化可能已不再那么紧 ...

  2. PyTorch模型读写、参数初始化、Finetune

    使用了一段时间PyTorch,感觉爱不释手(0-0),听说现在已经有C++接口.在应用过程中不可避免需要使用Finetune/参数初始化/模型加载等. 模型保存/加载 1.所有模型参数 训练过程中,有 ...

  3. Paper:Xavier参数初始化之《Understanding the difficulty of training deep feedforward neural networks》的翻译与解读

    Paper:Xavier参数初始化之<Understanding the difficulty of training deep feedforward neural networks>的 ...

  4. 网络训练技巧--参数初始化与优化方法

    实验日期 2021.10.07 实验环境 python 3.8.8 64-bit('base':conda) Initialization 深度学习的参数权重是很重要的,设置不当可能会导致梯度消失或梯 ...

  5. 网络共享查看其他计算机取消密码,Win7局域网访问需要密码 win7取消共享密码的方法...

    为了方便局域网用户访问使用,经常会将文件设置共享,但是最近有用户反映说他在win7系统访问局域网时需要输入密码,这是因为系统的安全限制,所以一般情况下要访问共享文件的时候都要输入密码才可以,虽然可以保 ...

  6. 《预训练周刊》第28期:M6-10T:高效多万亿参数预训练的共享去链接范式、大模型自然语言处理的最新进展综述...

    No.28 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 本期周刊,我们选择了11篇预训练相关的论文,涉及模型训练.图像编码.气候文本.对比学习.文本生成评估.小样本学习.决策推理 ...

  7. pytorch2维模型转换为3维模型,并使用2维模型参数初始化3维模型——以resnext为例

    pytorch2维模型转换为3维模型--以resnext为例 2D网络结构转换到3D网络结构 Inflate 初始化3D网络的参数 完整结构主要分为2步骤 2维resnext网络结构 3维resnex ...

  8. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶

    文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...

  9. PSO-CNN模型研究与实现-PSO优化模型内部超参数

    1.摘要 深度神经网络(DNN)在各种任务中取得了前所未有的成功,但是,这些模型性能直接取决于它们的超参数的设置.在实践中,优化超参数仍是设计深度神经网络的一大障碍.在这项工作中,我们建议使用粒子群优 ...

最新文章

  1. 5页面返回上个页面定位_5个步骤,画好页面流程图
  2. UIView之动画效果的实现方法(合集)
  3. markdown错误和问题
  4. OpenLayers事件处理Event.js(七)
  5. lsof 查看一个进程打开哪些fd及对应的文件或套接字操作
  6. Windows Presentation Foundation (WPF)中的命令(Commands)简述
  7. 使用element ui 日期选择器获取值后的格式问题
  8. FastCgi与PHP-fpm之间的关系
  9. 计算机excel知识点一级,2012年计算机一级考试高分必看知识点:EXCEL
  10. 网页版深度学习模型编辑器,搭建运行样样都行,还能3D可视化
  11. bzoj4569 [Scoi2016]萌萌哒 并查集+st表
  12. 意想不到的惊喜又来了 荣耀50系列或最高支持100W快充
  13. jsonarray转化list对象_第8篇:Cython的面向对象--Python类 vs Cython扩展类
  14. Window10上使用Git与Github远程仓库互连
  15. 实战 | 如何使用微搭低代码实现公差申请应用
  16. 全国大学生英语竞赛【常考词汇】
  17. 电路设计之8:MOS管驱动设计
  18. mysql高效查询_mysql 高效率查询背景
  19. 在Server 2008中添加磁盘清理
  20. BZOJ1863 [ZJOI2006]trouble 皇帝的烦恼 [思维题,二分答案,动态规划]

热门文章

  1. 一个通用纯C队列的实现
  2. netstat 相关命令解析
  3. vector源码剖析
  4. CRM、用户管理权限
  5. 以太坊ERC20代币合约案例
  6. [LeetCode] #22 Generate Parentheses
  7. IOS开发之页面切换
  8. storyboard隐藏iphone软键盘
  9. 如何提高VFP应用软件的路径适应性
  10. 浅释一下,为什么要使用接口?