CNN - 第二个转换层的每个内核到底是什么?

时间:2017-06-21 13:08:32

标签: python input convolution

我是一名声学学生,在深度学习方面真的很擅长。我的目标是很好地理解CNN的确切运作方式。有一部分我不明白。我无法找到有关该信息的任何确切信息。

我的模型是这样的:

    model = Sequential()
    model.add(Conv2D(32, (3, 3), padding='same', activation='relu', input_shape = input_shape)) 
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.2))

    model.add(Conv2D(48, (3, 3), padding='same', activation='relu')) 
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.2))
    model.add(Flatten())

    model.add(Dense(ndim, activation='relu', use_bias=True, batch_size=batchSize, kernel_initializer='glorot_uniform', kernel_regularizer=None))       
    model.add(Dense(nclasses, activation='softmax', kernel_regularizer=l2(1e-2))) 

    model.compile(loss='categorical_crossentropy', optimizer=opt)

它有效,这不是问题。我知道,第二个转换层的输入由32个特征映射(第一个汇聚层的输出)组成。

第二个转换层的每个内核到底有什么问题?

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:0)

据我所知,如果输入图像为M*N,则第一个Conv2D的输出为M*N,深度为32,即M*N*32。并且在第一次最大合并后(M/2)*(N/2)*32。因此第二个Conv2D的输入是(M/2)*(N/2)*32矩阵(张量)。然后第二个Conv2D将32 (M/2)*(N/2) 2D矩阵(张量)卷积到(M/2)*(N/2) * 64矩阵。

指定卷积的行为方式。我使用tensorflow进行深度学习,下面的陈述也将帮助你理解CNN。

输入图像尺寸[M,N,3],3用于图像深度(例如RGB),使用此尺寸的图像,第一个卷积应具有[3,3,3,32],前两个3用于卷积窗口大小,第三个为深度,32为输出深度为例。然后进行第二次卷积应该有[3,3,32,64],第三个数字32必须与第一个转换输出深度相同。

为此,我们可以看到,卷积是通过乘法3 * 3窗口完成的,即一个深度到一个卷积窗口。在您的示例中,第二个转换应该有3 * 3 * 32个参数来转发第一个转换的M * N * 32输出。

希望这是你想要的,我已经说清楚了。