Tensorflow卷积网络 - 如何计算尺寸(形状)?

时间:2016-11-01 02:09:19

标签: python neural-network tensorflow

我不确定张量流中的卷积中性网络如何计算此tutorial中的维度。

  1. 图片有28 * 28像素(x_image = tf.reshape(x, [-1,28,28,1])
  2. 补丁大小为5x5(W_conv1 = weight_variable([5, 5, 1, 32]
  3. 第一个卷积层由:(h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
  4. 完成
  5. 第一层的形状为:h_pool1.get_shape()TensorShape([Dimension(10), Dimension(14), Dimension(14), Dimension(32)])
  6. Q1 :为什么第一个维度为10?

    Q2 :为什么5x5补丁尺寸会将尺寸减小到14x14?如果我有一个28x28的图像,并且我对所有像素应用了5x5补丁,我预计会超过14x14。

    第3季度-1的代码x_image做了什么?

1 个答案:

答案 0 :(得分:4)

形状是(batch_size,height,width,channel)。

Q1。 10是您的批量大小。我猜你有这样的一句话:

x = tf.placeholder(tf.float32, shape=[10, 784])

在教程中,行是:

x = tf.placeholder(tf.float32, shape=[None, 784])

这样,您将批量化“Dimension(None)”而不是“Dimension(10)”。

<强> Q2。 Layer1包括卷积层和最大池层。带"SAME" padding的卷积层将输出大小相同的内容。尺寸减小来自2x2最大池与“SAME”填充,输出(h / 2,w / 2)。

def conv2d(x, W):
   return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def max_pool_2x2(x):
   return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                         strides=[1, 2, 2, 1], padding='SAME')

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

<强> Q3。 tf.reshape() with a single dimension "-1"保留程序自动计算的维度,以便总大小保持不变。