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卷积层中的第一个初始化权重是啥的主要内容,如果未能解决你的问题,请参考以下文章

基于pytorch实现模型剪枝

Pytorch:AG接口,BBIN接口,MG接口,PT接口对接平台权重初始化

如何正确更新 PyTorch 中的权重?

PyTorch 模型层权重如何被隐式初始化? [复制]

自定义权重初始化导致错误 - pytorch

如何在Tensorflow Object Detection API中初始化卷积层的权重?