Notes on Section 5.2
本节,我们将介绍以下内容:
- 访问参数,用于调试、诊断和可视化;
- 参数初始化;
- 在不同模型组件间共享参数。
首先我们需要知道,在nn库中,虽然可能存在多个架构相同的层,但是每一层都有独立编码,这也就是说对应的参数都是可查询的,我们可以利用以下方法打印这些数据

注意到的是,对于层内存储的weight/bias等,属于复合参数实例,其中除了本身的数值以外,还有梯度信息和梯度激活信息

我们也可以利用正则表达式一次性遍历所有的底层参数

这里我们会注意到,从不同地址触发查找相同位置的参数,所返回的名称是有别的
这说明这是一个树状的连接方式,参考下图

这也就解释了以下两个实际上是指向等效位置的(另外Sequential是用列表类似的逻辑存储这些层的,保证了有序性)

另外Sequential也是完全支持嵌套的,生成路径逻辑也是完全一样的(比如一个层的路径是0.2.1)块中加载块会保留路径结构

这里我们在add.module中会指定加入的块名称(这里是block {i}),这个名称是有唯一性的,会覆盖(比如下面就重新写了一遍block 0,就出现了覆盖)

不过add.module中指定的文本地址和隐性的数字地址是同时存在的,事实上,在检索时,用列表格式只能以数字作为路径检索,不过文本路径检索同样是可以用getattr实现

我们可以调用内置的apply函数来遍历每一个module类实体,从而进行参数的初始化调整

同样我们可以实现自定义的权重分配

(这里abs()函数调用时执行的是逐元素操作)
以及我们可以直接对单个元素进行操作

同时我们可以用类似浅拷贝的思路实现参数绑定

在这个例子中,两个参数共享同样的地址,所以说在梯度更新时,这个参数也会被更新两遍(分别来自两个层计算出来的梯度),直观上理解为这两个梯度的叠加作用在了这组参数上
- Title: Notes on Section 5.2
- Author: bobown_yao
- Created at : 2026-01-04 00:00:00
- Updated at : 2026-01-17 16:19:05
- Link: https://bobownyao.github.io/2026/01/04/Notes-on-Section-5-2/
- License: All Rights Reserved © bobown_yao