PyTorch 模型参数的访问、初始化和共享

1. 模型参数的访问

对于Sequential实例中含模型参数的层,我们可以通过Module类的parameters()或者named_parameters方法来访问所有参数(以迭代器的形式返回),后者除了返回参数Tensor外还会返回其名字。

对于使用Sequential类构造的神经网络,我们可以通过方括号[]来访问网络的任一层。索引0表示隐藏层为Sequential实例最先添加的层。

返回的param的类型为torch.nn.parameter.Parameter,其实这是Tensor的子类,和Tensor不同的是如果一个Tensor是Parameter,那么它会自动被添加到模型的参数列表里。因为Parameter是Tensor,即Tensor拥有的属性它都有,比如可以根据data来访问参数数值,用grad来访问参数梯度。

2. 初始化模型参数

PyTorch的init模块里提供了多种预设的初始化方法。

3. 共享模型参数

如何共享模型参数:Module类的forward函数里多次调用同一个层

(如果我们传入Sequential的模块是同一个Module实例的话参数也是共享的)

延后初始化——使用Gluon创建的全连接层的时候不需要指定输入个数,当调用initialize函数时,由于隐藏层输入个数依然未知,系统也无法得知该层权重参数的形状。只有在当形状已知的输入X传进网络做前向计算net(X)时,系统才推断出该层的权重参数形状为多少,此时才进行真正的初始化操作。但是使用PyTorch在定义模型的时候就要指定输入的形状。

你可能感兴趣的:(#,PyTorch,pytorch,深度学习,神经网络)