首页 > 解决方案 > Keras:改变步幅似乎并没有改变 conv2d/conv3d 中的参数数量

问题描述

我可能在这里遗漏了一些简单的东西,但是当我更改卷积层中的步数时,我没有得到要拟合的参数数量的相应变化。考虑这些:

from keras import layers as L
x=L.Conv2D(filters=32, kernel_size=(3,3), strides=(1,1),padding='valid')(input)
y=L.Conv2D(filters=32, kernel_size=(3,3), strides=(2,2),padding='valid')(input)
z=L.Conv2D(filters=32, kernel_size=(3,3), strides=(3,3),padding='valid')(input)

我认为 (3,3) 的步幅将在每个维度上放置 3 倍的过滤器,因此要拟合的参数数量相应减少。然而,事实并非如此。

如果我的输入层的大小为 (none,63,143,32)——我给它提供了一个 conv3d 的压缩输出——那么无论步幅如何,卷积的参数数量总是 9248。苏……我错过了什么?

标签: tensorflowkeras

解决方案


卷积过滤器从不依赖于图像的大小、填充、步幅等。

它们仅依赖于kernel_sizefilters

它们的形状是:(kernel_size[0], kernel_size[1], input_filters, output_filters)

我建议你阅读这个页面,它解释了很多关于滑动图像的卷积,尽管它们不代表图像中的输入通道。


推荐阅读