我的模特:
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
的数组。它不应该返回3x3
的32个矩阵吗?
答案 0 :(得分:1)
权重形状是正确的,因为卷积滤波器应用于整个3D输入音量,不同频道的参数不共享(尽管它们在空间上共享)。请参阅CS231n class:
中的图片是的,输出音量是通过对深度音量的卷积求和得到的,但每个通道中的参数不同。
在您的情况下,频道为 RGB (自input_shape = (IMAGE_SIZE, IMAGE_SIZE, 3)
起),空间过滤器尺寸为3x3
,并且有32
个过滤器。因此,结果形状为3x3x3x32
,每个过滤器的形状为3x3x3
。
答案 1 :(得分:0)
不,返回值的形状正确。您没有考虑的是32个滤波器中的每一个在空间维度上都是3x3,并且有三个通道,与输入相同。这意味着每个过滤器也适用于通道维度。您期望的只有在单通道图像上进行2D卷积时才有效。