首页 文章

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

提问于
浏览
2

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

  • 图像有28 * 28像素( x_image = tf.reshape(x, [-1,28,28,1])

  • 补丁大小为5x5( W_conv1 = weight_variable([5, 5, 1, 32]

  • 第一个卷积层由:( h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) )完成

  • 第一层的形状是: h_pool1.get_shape()TensorShape([Dimension(10), Dimension(14), Dimension(14), Dimension(32)])

Q1 :为什么第一个维度是10?

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

Q3-1x_image 的代码中做了什么?

1 回答

  • 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"保留程序自动计算的尺寸,以使总尺寸保持不变 .

相关问题