我在Udacity PyTorch中进行自学 关于最后一段
学习
在您一直在使用的代码中,已经明确设置了滤镜权重的值,但是神经网络在训练一组图像数据时实际上将学习最佳滤镜权重。在本节的稍后部分,您将学习所有关于这种类型的神经网络的信息,但是您知道,高通和低通滤波器是定义这种网络行为的要素,并且您知道如何从头开始编写代码! >
在实践中,您还将发现许多神经网络学习检测图像的边缘,因为对象的边缘包含有关对象形状的有价值的信息。
我已经研究了最后44个部分。但是我无法回答以下问题
torch.nn.Conv2d
时初始化的体重是多少?以及如何自己定义它?PyTorch
如何在卷积层中更新权重?答案 0 :(得分:2)
声明nn.Conv2d
时,权重通过此code初始化。
尤其是,如果您有偏见,它会使用Kaiming等人提出的初始化方法。初始化为bound=\sqrt{6/((1+a^2)fan_in)}
(请参阅here)(绑定,绑定)之间的均匀分布。
您也可以手动初始化重量。这已经在其他地方得到了回答(请参见here),我将不再重复。
当您调用optimizer.step
并且优化器已注册了卷积滤波器的参数时,它们将被更新。
答案 1 :(得分:0)
1。在PyTorch中,Conv2d设计为接受形状为(N,C,H,W)的4D张量作为正向传递的输入,其中N是小批量中的样本数,C是输入通道(例如图像的3个颜色通道),H和W是图像的高度和宽度。
您的权重应该反映出来并且是形状的4D张量(F,C,K_H,K_W),其中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
,以明确表示应通过反向传播来更新该张量。