反卷积层的意外形状
Unexpected shape for deconv layer
我在一个 deconv 层上工作,它升级了 64 个通道:64x48x48 => 64x96x96。
layer {
bottom: "layer41_conv"
top: "layertest_upsample"
name: "layertest_upsample"
type: "Deconvolution"
convolution_param {
num_output: 64
group: 64
kernel_size: 2
pad: 0
stride: 2
}
}
当我打印参数的形状时:
(64,1,2,2)。
我被期望是这样的:
(64,64,2,2) 因为输入有 64 个通道,输出有 64 个通道。
谁能给我解释一下这是怎么回事?
您定义了group: 64
group
所做的是(根据 manual):
group
(g
) [default 1]: If g > 1
, we restrict the connectivity of each filter to a subset of the input. Specifically, the input and output channels are separated into g
groups, and the k
-th output group channels will be only connected to the k
-th input group channels.
在您的情况下,您将所有 64 个通道分组为 64 个组 - 这就是第 k
个输入通道被 2x2 内核映射(隔离)到第 k
个输出通道.总而言之,您有 64 个这样的 2x2 映射,这就是为什么您的权重 blob 是 64x1x2x2 而不是 64x64x2x2 的原因。
如果您删除 group: 64
,您将拥有您期望的完整权重矩阵。
我在一个 deconv 层上工作,它升级了 64 个通道:64x48x48 => 64x96x96。
layer {
bottom: "layer41_conv"
top: "layertest_upsample"
name: "layertest_upsample"
type: "Deconvolution"
convolution_param {
num_output: 64
group: 64
kernel_size: 2
pad: 0
stride: 2
}
}
当我打印参数的形状时: (64,1,2,2)。 我被期望是这样的: (64,64,2,2) 因为输入有 64 个通道,输出有 64 个通道。 谁能给我解释一下这是怎么回事?
您定义了group: 64
group
所做的是(根据 manual):
group
(g
) [default 1]: Ifg > 1
, we restrict the connectivity of each filter to a subset of the input. Specifically, the input and output channels are separated intog
groups, and thek
-th output group channels will be only connected to thek
-th input group channels.
在您的情况下,您将所有 64 个通道分组为 64 个组 - 这就是第 k
个输入通道被 2x2 内核映射(隔离)到第 k
个输出通道.总而言之,您有 64 个这样的 2x2 映射,这就是为什么您的权重 blob 是 64x1x2x2 而不是 64x64x2x2 的原因。
如果您删除 group: 64
,您将拥有您期望的完整权重矩阵。