定义与操作自己的神经网络
|Last edited: 2025-2-20
在神经网络搭建过程中,我们有时会不满足于使用pytorch库中自带的一些模块,我们希望能定义自己的模块,该怎么做呢?

一、自定义块

由于自动求导机制,我们不需要显式地定义反向传播模块,我们只需要在继承 torch.nn.module 的基础上定义forward() 前向传播函数即可。
 

二、参数管理

在神经网络训练过程中,有时候我们需要直接对参数进行操作,也有时候我们需要输出参数的状态来进行debug。在Pytorch中,具体操作过程如下:

1、访问参数

 

2、参数初始化

前面我们也提到,当参数初始化不当的时候,会导致严重的后果(如将参数全部初始化为一样的值)
那么我们具体在Pytorch中如何进行各种各样的参数初始化呢?
 

3、参数共享

可以把某一个模块反复地放到神经网络中,对应的这些层是完全一致的,共享参数,如:
在反向传播时,共享参数的梯度是两次梯度之和。
 

三、延迟初始化

有时候我们定义网络时不希望限定死输入的维度,此时在Pytorch中我们可以使用nn.LazyLinear
nn.LazyLinear只指定输出维度,同时会在第一次接受输入时确定输入维度。
 

四、读取与保存

当项目较大时,你可能需要中间暂停训练,那么你就需要将此时的参数保存下来,Pytorch给了我们很方便的保存方式
Loading...