我是一名声学学生,在深度学习方面真的很擅长。我的目标是很好地理解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个特征映射(第一个汇聚层的输出)组成。
第二个转换层的每个内核到底有什么问题?
感谢您的时间和帮助!
答案 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输出。
希望这是你想要的,我已经说清楚了。