我的模特:

classifier = Sequential()

# Convolutional + MaxPooling -> 1
classifier.add(Conv2D(32, (3,3), input_shape = (IMAGE_SIZE, IMAGE_SIZE, 3)))
convout1 = Activation('relu')
classifier.add(convout1)
classifier.add(MaxPooling2D(pool_size = (2,2)))
classifier.add(Dropout(0.25))


我正在运行以下代码来获取权重

classifier.layers[0].get_weights()[0]


它返回一个3x3x3x32数组。它不应该返回32个3x3矩阵吗?

最佳答案

权重形状是正确的,因为将卷积滤波器应用于整个3D输入体积,并且不共享不同通道的参数(尽管它们在空间上是共享的)。请参见CS231n class中的图片:

machine-learning - Conv2D:如何获取每个过滤器的值-LMLPHP

是的,输出体积是通过对深度体积上的卷积求和而获得的,但是每个通道中的参数是不同的。

在您的情况下,通道为RGB(自input_shape = (IMAGE_SIZE, IMAGE_SIZE, 3)起),空间滤镜大小为3x3,并且有32个滤镜。因此,结果形状为3x3x3x32,每个过滤器的形状为3x3x3

10-06 06:48