pytorch卷积层中的第一个初始化权重是啥
Posted
技术标签:
【中文标题】pytorch卷积层中的第一个初始化权重是啥【英文标题】:what is the first initialized weight in pytorch convolutional layerpytorch卷积层中的第一个初始化权重是什么 【发布时间】:2019-05-28 04:12:13 【问题描述】:我在Udacity PyTorch自学 关于最后一段
学习
在您一直使用的代码中,您一直在明确设置过滤器权重的值,但神经网络实际上会在训练一组图像数据时学习最佳过滤器权重。您将在本节后面部分了解有关此类神经网络的所有信息,但要知道高通和低通滤波器是定义此类网络行为的要素,并且您知道如何从头开始编写代码!
在实践中,您还会发现许多神经网络学会检测图像的边缘,因为对象的边缘包含有关对象形状的有价值信息。
我已经学习了最后的第 44 节。但我无法回答以下问题
torch.nn.Conv2d
时初始化的权重是多少?以及如何自己定义?
PyTorch
如何更新卷积层的权重?
【问题讨论】:
【参考方案1】:当您声明nn.Conv2d
时,权重会通过此code 进行初始化。
特别是,如果您给出偏差,它会使用 Kaiming 等人提出的初始化。它初始化为 (-bound, bound) where bound=\sqrt6/((1+a^2)fan_in)
(参见 here) 之间的均匀分布。
您也可以手动初始化权重。这已在其他地方得到解答(参见here),我不会重复。
当您调用optimizer.step
并且优化器注册了卷积滤波器的参数时,它们会更新。
【讨论】:
【参考方案2】:1.在 PyTorch 中,Conv2d 被设计为接受形状为 (N, C, H, W) 的 4D 张量作为前向传递的输入,其中 N 是 mini-batch 中的样本数,C 是输入通道(例如图像的 3 个颜色通道),H 和 W 是图像的高度和宽度。
您的权重应该反映这一点并且是形状 (F, C, K_H, K_W) 的 4D 张量,其中 F 是您希望在该层中拥有的不同内核的数量,C 是输入通道的数量,K_H和 K_W 是内核的高度和宽度。可以使用 PyTorch 文档 nn.Conv2d 定义中的公式计算初始化的确切值。
这是一个有助于可视化计算的好图。 Cross-correlation computation with 2 input channels. 参考。 http://www.d2l.ai/chapter_convolutional-neural-networks/channels.html,图6.4.1
2.使用反向传播算法通过计算梯度来更新权重。它在 PyTorch 的底层执行。如果你自己初始化权重,你应该为权重张量添加requires_grad=True
,具体说明这个张量应该通过反向传播来更新。
【讨论】:
以上是关于pytorch卷积层中的第一个初始化权重是啥的主要内容,如果未能解决你的问题,请参考以下文章