我的模型:
classifier = Sequential()# Convolutional + MaxPooling -> 1classifier.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课程中的图片:
是的,输出体是通过在深度体上对卷积进行求和得到的,但每个通道的参数是不同的。
在你的例子中,通道是RGB(因为input_shape = (IMAGE_SIZE, IMAGE_SIZE, 3)
),空间滤波器大小是3x3
,并且有32
个滤波器。因此,结果形状是3x3x3x32
,每个滤波器的形状是3x3x3
。