Conv2D:如何获取每个过滤器的值

时间:2018-04-13 05:26:06

标签: machine-learning neural-network keras keras-layer convolutional-neural-network

我的模特:

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个矩阵吗?

2 个答案:

答案 0 :(得分:1)

权重形状是正确的,因为卷积滤波器应用于整个3D输入音量,不同频道的参数不共享(尽管它们在空间上共享)。请参阅CS231n class

中的图片

convolution

是的,输出音量是通过对深度音量的卷积求和得到的,但每个通道中的参数不同。

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

答案 1 :(得分:0)

不,返回值的形状正确。您没有考虑的是32个滤波器中的每一个在空间维度上都是3x3,并且有三个通道,与输入相同。这意味着每个过滤器也适用于通道维度。您期望的只有在单通道图像上进行2D卷积时才有效。