【问题标题】:understanding pytorch conv2d internally [duplicate]在内部理解 pytorch conv2d [重复]
【发布时间】:2021-09-09 12:58:27
【问题描述】:

我试图了解 nn.conv2d 在内部做什么。

假设我们将 Conv2d 应用于 32*32 RGB 图像。

torch.nn.Conv2d(3, 49, 4, bias=True)

所以:

  1. 当我们初始化 conv 层时,它会有多少权重和形状,请告诉这是否存在偏差?
  2. 在应用它之前,图像的形状为 3 * 32 * 32,应用后为 49 * 29 * 29,那么两者之间会发生什么?

我将“滑动”操作(不知道真名)定义为首先将内核元素乘以图像形状的框的第一个元素,直到内核的最后一个元素对应,从而计算出 1of29 * 1of29。 并在水平和垂直方向上“全部滑动”,直到计算出所有 29 * 29。

所以我了解内核的行为方式,但我不了解torch.nn.Conv2d(3, 49, 4, bias=True) 将创建多少个内核以及它们中的哪些将应用于 R、G、B 通道。

【问题讨论】:

  • 见this
  • @Shai thanx 所以我认为我的第一个问题的答案是 49*4*4 权重 + 49 个偏差。
  • 不,正如 Ivan 所说,49*(4*4*3 + 1) 将是权重。
  • @FarhangAmaji 确实 49*4*4*3 权重 + 49 个偏差。
  • @Ivan 我还有另一个问题,我在“交叉验证”中问过,但他们关闭了这个问题,这对我来说是不可接受的stats.stackexchange.com/questions/543809/…,因为提供的所有替代链接都是用于交叉验证而不是数据分裂。

标签: pytorch conv-neural-network convolution


【解决方案1】:

我了解内核的行为方式,但我不知道有多少 内核将由nn.Conv2d(3, 49, 4, bias=True) 和 它们中的哪一个将应用于 R、G 和 B 通道。

调用nn.Conv2d(3, 49, 4, bias=True) 将初始化49 4x4-kernels,每个内核共有三个通道和一个偏置参数。总共有49*(4*4*3 + 1) 个参数,即 2,401 个参数。

您可以通过以下方式检查它是否确实正确:

>>> conv2d = nn.Conv2d(3, 49, 4, bias=True)

参数列表将包含 weight 张量形 (n_filters=49, n_channels=3, kernel_height=4, kernel_width=4) 和 bias 张量形 (49,):

>>> [p.shape for p in conv2d.parameters()]
[torch.Size([49, 3, 4, 4]), torch.Size([49])]

如果我们看一下参数的总数,我们确实会发现:

>>> nn.utils.parameters_to_vector(conv2d.parameters()).numel()
2401

关于它们的应用方式:49 中的每一个内核都将“独立地”应用于输入映射。对于每个过滤器操作,您都在将三通道张量的输入与三通道内核进行卷积。这些49 卷积中的每一个都添加了各自的偏差。最后,您会得到许多 49 单通道映射,它们连接起来构成一个 49-通道映射。在实践中,使用输入的窗口视图一次性完成所有操作。

我当然偏向于我自己的帖子:here 你会发现卷积神经网络中形状的另一种解释。

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 1970-01-01
    • 2021-05-05
    • 2020-03-26
    • 2019-09-23
    • 2015-03-03
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多