【发布时间】:2019-06-07 16:30:42
【问题描述】:
我从 Udacity 教程“Intoduction to Deep learning with TensorFlow”获得的这段代码:
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu,
input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D((2, 2), strides=2),
tf.keras.layers.Conv2D(64, (3,3), padding='same', activation=tf.nn.relu),
tf.keras.layers.MaxPooling2D((2, 2), strides=2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
我无法理解的是第二个Conv2D 在第一个MaxPooling2D-layer 之后是如何计算的。
假设我们正在处理 28x28px 的图像。第一个Conv2D-layer 返回 (28, 28, 32) 形状,其中 32 等于应用的过滤器数量。 (3,3) 是内核大小。结果将发送到MaxPooling2D-layer,它将图像的大小从 (28, 28, 32) 减小到 (14, 14, 32)。我在吗?
现在我们有一个形状 (14, 14, 32) 并将其发送到第二个Conv2D-layer,它将使用 (3,3) 内核应用 64 个过滤器。
在我们的 (14, 14, 32) 数据上应用具有 64 个过滤器的 (3,3) 内核的过程如何?第二个Conv2D-layer 是否会创建 (14, 14, 2048) 输出形状?或者第二个Conv2D-layer 将为 64 个应用的过滤器之一创建 (14, 14, 32)x64 个不同的块?
我在整个互联网上进行了搜索,以直观地找到如何更好地理解这个过程,但没有运气。
谢谢!
【问题讨论】:
-
相信这一点,[cs231n.github.io/convolutional-networks] 会帮助你直观地理解这一现象。
标签: python tensorflow conv-neural-network