【问题标题】:what is the first initialized weight in pytorch convolutional layerpytorch卷积层中的第一个初始化权重是什么
【发布时间】:2019-05-28 04:12:13
【问题描述】:

我在Udacity PyTorch自学 关于最后一段

学习

在您一直使用的代码中,您一直在明确设置过滤器权重的值,但神经网络实际上会在训练一组图像数据时学习最佳过滤器权重。您将在本节后面部分了解有关此类神经网络的所有信息,但要知道高通和低通滤波器是定义此类网络行为的要素,并且您知道如何从头开始编写代码!

在实践中,您还会发现许多神经网络学会检测图像的边缘,因为对象的边缘包含有关对象形状的有价值信息。

我已经学习了最后的第 44 节。但我无法回答以下问题

  1. torch.nn.Conv2d时初始化的权重是多少?以及如何自己定义?
  2. PyTorch如何更新卷积层的权重?

【问题讨论】:

    标签: python neural-network conv-neural-network pytorch


    【解决方案1】:

    当您声明nn.Conv2d 时,权重会通过此code 进行初始化。

    特别是,如果您给出偏差,它会使用 Kaiming 等人提出的初始化。它初始化为 (-bound, bound) where bound=\sqrt{6/((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,具体说明这个张量应该通过反向传播来更新。

      【讨论】:

        猜你喜欢
        • 2018-06-16
        • 2021-06-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 1970-01-01
        相关资源
        最近更新 更多