Tensorflow教程,卷积

时间:2017-05-17 17:13:05

标签: tensorflow

所以我一直在关注Tensorflow并尝试着解决一件事,我不知道我错过了什么。我正在查看https://www.tensorflow.org/versions/master/tutorials/layers中的教程,特别是模型构建步骤:

  """Model function for CNN."""
  # Input Layer
  input_layer = tf.reshape(features, [-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])

如果我理解正确,使用32 @ 5x5过滤器进行卷积输入会创建32个特征映射@ 28x28的输出。然后max-pooled将要素图缩小为宽度和高度= 14x14。

所以这是我理解的问题,我们有32个@ 14x14特征映射,我们用另一组64个滤波器@ 5x5卷积。它应该生成尺寸为14x14的32 * 64 = 2048个特征图吗?所以在重塑它时,我们应该在最后一个最大池化步骤之后使用[-1,7 * 7 * 2048]?或者这个conv2在conv2中的深度为32,滤波器的大小如[5,5,32]?也许我错过了一些关键理论或只是盲目的;>

如果有人可以帮助我理解这一点,那会不会适用!

干杯!

1 个答案:

答案 0 :(得分:1)

您使用的填充“相同”。

If padding == "same"
    output_shape[i] = ceil(input_shape[i]/stides[i])
If padding == "valid": 
    output_spatial_shape[i] = ceil((input_spatial_shape[i] - (spatial_filter_shape[i]-1) * dilation_rate[i]) / strides[i]).

要获得您期望使用填充“有效”的行为。

在这里查看API:https://www.tensorflow.org/api_docs/python/tf/nn/convolution

我希望这会有所帮助。