我对keras中Conv2D()层函数的第一个参数filter产生了困惑。据我理解,filter应该能够进行边缘检测、图像锐化或图像模糊等操作,在定义模型时,我却遇到了问题。
input_shape = (32, 32, 3)
model = Sequential()
model.add( Conv2D(64, kernel_size=(5, 5), activation='relu', input_shape=input_shape, strides=(1,1), padding='same') )
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Conv2D(64, kernel_size=(5, 5), activation='relu', input_shape=input_shape, strides=(1,1), padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(Conv2D(128, kernel_size=(5, 5), activation='relu', input_shape=input_shape, strides=(1,1), padding='same'))
model.add(Flatten())
model.add(Dense(3072, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
在Conv2D函数中,我没有提到边缘检测、模糊或锐化。输入图像是32x32的RGB图像。
我的问题是,当我将卷积层定义为Conv2D(64, ...)
时,这个64是否表示64种不同类型的过滤器,如垂直边缘、水平边缘等,这些过滤器由keras随机选择?如果是这样的话,那么对于一个32x32的单通道图像,在64个过滤器和5x5内核以及1x1步幅下,卷积层的输出是64个28x28大小的图像。这64个图像如何组合成一个单一的图像用于后续的层?