阅读Going deep with convolutions我遇到了一个DepthConcat层,它是提议的inception 模块的构建块,它结合了多个不同大小的张量的输出。作者将此称为“过滤器串联”。Torch似乎有一个实现,但我不太明白它的作用。有人可以用简单的话解释吗?
'Going deep with convolutions' 中的 DepthConcat 操作如何工作?
机器算法验证
神经网络
火炬
卷积神经网络
2022-03-18 02:52:34
2个回答
当您阅读该白皮书时,我想到了同样的问题,您参考的资源帮助我提出了实施方案。
在您引用的 Torch 代码中,它说:
--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :
深度学习中的“深度”这个词有点含糊。幸运的是,这个SO Answer提供了一些明确性:
在深度神经网络中,深度是指网络的深度,但在这种情况下,深度用于视觉识别,它转换为图像的第三维。
在这种情况下,您有一个图像,此输入的大小为 32x32x3,即(宽度、高度、深度)。随着深度转换到训练图像的不同通道,神经网络应该能够基于此参数进行学习。
因此 DepthConcat 沿深度维度连接张量,深度维度是张量的最后一个维度,在本例中是 3D 张量的第三维度。
DepthConcat 需要使张量在所有维度上都相同,但深度维度除外,正如Torch 代码所说:
-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.
例如
A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3).
在上图中,我们看到了一张 DepthConcat 结果张量的图片,其中白色区域是零填充,红色是 A 张量,绿色是 B 张量。
这是此示例中 DepthConcat 的伪代码:
- 查看张量 A 和张量 B 并找到最大的空间维度,在这种情况下,这将是张量 B 的 16 个宽度和 16 个高度大小。由于张量 A 太小并且与张量 B 的空间维度不匹配,因此需要对其进行填充。
- 通过将零添加到第一和第二维度,使张量 A 的大小为 (16, 16, 2),用零填充张量 A 的空间维度。
- 沿着深度(第 3 个)维度连接填充张量 A 和张量 B。
我希望这可以帮助其他认为相同问题阅读该白皮书的人。
其它你可能感兴趣的问题