stride=2 的 2x2 deconv 内核如何工作?
How does a 2x2 deconv kernel with stride=2 work?
例如,如果特征图是 8x8,比起我使用这样的 deconv 而特征图变成 16x16,我很困惑有什么区别:
deconv(kernel_size=2, stride=2, padding='valid')
和
deconv(kernel_size=3, stride=2, padding='same')
由于它们都会使特征图大2倍,它们分别是如何工作的?
我想您会发现 this web page 上的解释和交互式演示非常有帮助。
具体来说,无论内核大小如何,设置 stride=2
都会使输出形状加倍。
kernel_size
确定每个输入像素影响多少输出像素。
设置 stride=2
和 kernel_size=2
只是 "duplicates" 你的内核输出。考虑这个一维示例。假设你的内核是[a, b]
,你的输入是[A, B, ...]
,那么输出是
[A*a, A*b, B*a, B*b, ...]
对于kernel_size=3
,输出变为
[A*a, A*b, A*c+B*a, B*b, B*c+C*a, ...]
例如,如果特征图是 8x8,比起我使用这样的 deconv 而特征图变成 16x16,我很困惑有什么区别:
deconv(kernel_size=2, stride=2, padding='valid')
和
deconv(kernel_size=3, stride=2, padding='same')
由于它们都会使特征图大2倍,它们分别是如何工作的?
我想您会发现 this web page 上的解释和交互式演示非常有帮助。
具体来说,无论内核大小如何,设置 stride=2
都会使输出形状加倍。
kernel_size
确定每个输入像素影响多少输出像素。
设置 stride=2
和 kernel_size=2
只是 "duplicates" 你的内核输出。考虑这个一维示例。假设你的内核是[a, b]
,你的输入是[A, B, ...]
,那么输出是
[A*a, A*b, B*a, B*b, ...]
对于kernel_size=3
,输出变为
[A*a, A*b, A*c+B*a, B*b, B*c+C*a, ...]