我需要帮助理解CNN。
model = keras.models.Sequential()
model.add(convolutional.Convolution2D(32, (8,8), activation='relu', strides=(4, 4), padding='same',input_shape=(80,80,4)))
model.add(convolutional.Convolution2D(64, (4, 4), activation='relu', strides=(2, 2), padding='same'))
model.add(convolutional.Convolution2D(64, (3, 3), activation='relu', strides=(1, 1), padding='same'))
我不确定第一个CNN的输出。我知道它超过了32个过滤器,内核大小为8x8,大小为4x4。我也知道这个计算宽度的公式:
W =(W-F + 2P)/ S + 1
W =(80 - 8 + ??)/ 4 + 1
我不确定在P上放什么 - 这意味着填充。你能帮我理解第一个CNN输出的大小吗?另外,您能帮我理解为什么在第一步之后滤波器从32变为64吗?这有什么好的理由吗?
答案 0 :(得分:1)
参数padding=same
表示您的输入将被填充,以便此图层的输出与原始输入的长度相同。向输入添加填充仅意味着在输入的外边缘周围添加像素(通常为值0)。您希望这样做,以便指定的过滤器能够卷积整个输入而不会遗漏边缘上的某些像素值。有关在Keras转换层中使用此参数的更多详细信息,请参阅Keras文档here。
要查看这些图层的输出大小,请运行model.summary()
。这将显示模型中每个图层的输出大小。
最后,过滤器大小是任意选择/设置的,但一般来说,随着模型变得更深和更复杂,过滤器通常会在后续层中增加。我有一个video on CNNs来解释这些概念,并在视觉上展示过程,您可能会发现它很有用。