TF CNN示例

时间:2017-11-12 16:03:57

标签: python tensorflow neural-network conv-neural-network recurrent-neural-network

下面是代码tensorflow提供的。我将描述我目前对接受场大小变化的理解,如果有人能让我知道我的误解在哪里,我将非常感激。

概述: [28,28] - > 32 [24,24] - > 32 [12,12] - > 2048 [8,8]

长版:

  • 从[28,28]数组开始
  • 第一个卷积层有32个过滤器,内核大小为[5,5],因此输出为32 [24,24] s。
  • 使用[2,2]的内核和2的步长对池进行池化可以保持数组的数量,但会减小大小,因此输出为32 [12,12] s。
  • 下一个卷积层有64个大小为[5,5]的过滤器,所以最终得到2048 [8,8] s

2048 [8,8] s不是后续代码中表示的内容。我的错误是什么?所有指导都表示赞赏。

  # Input Layer
  input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])

  # Convolutional Layer #1
  conv1 = tf.layers.conv2d(
      inputs=input_layer,
      filters=32,
      kernel_size=[5, 5],
      padding="same",
      activation=tf.nn.relu)

  # Pooling Layer #1
  pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

  # Convolutional Layer #2 and Pooling Layer #2
  conv2 = tf.layers.conv2d(
      inputs=pool1,
      filters=64,
      kernel_size=[5, 5],
      padding="same",
      activation=tf.nn.relu)             
  pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)

  # Dense Layer
  pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 64])
  dense = tf.layers.dense(inputs=pool2_flat, units=1024, activation=tf.nn.relu)
  dropout = tf.layers.dropout(
      inputs=dense, rate=0.4, training=mode == tf.estimator.ModeKeys.TRAIN)

1 个答案:

答案 0 :(得分:1)

conv2d图层使用padding="same",这意味着输入用零填充,以便输出大小相同。为了获得您期望的结果,我们将使用padding="valid",这意味着没有填充。