我不确定tensorflow中的卷积中性网络如何计算这个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)])
问题1:为什么第一个维度是10?
问题2:为什么5x5补丁大小将尺寸减少到14x14?如果我有一个28x28的图像,我应用5x5补丁到所有像素,我希望超过14x14。
问题3:-1x_image的代码中做什么?

最佳答案

形状为(批量大小、高度、宽度、通道)。
第一季度。10是你的批量。我想你的台词是这样的:

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

在本教程中,这一行是:
x = tf.placeholder(tf.float32, shape=[None, 784])

这样,您将拥有batchsize“Dimension(None)”而不是“Dimension(10)”。
问题2。
第1层包括卷积层和最大池层。"SAME" padding的卷积层将输出相同大小的内容。大小减少来自于2x2最大池与“相同”的填充,它输出(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)

问题3。
tf.reshape() with a single dimension "-1"保留由程序自动计算的尺寸,以便总尺寸保持不变。

关于python - Tensorflow卷积网络-如何计算尺寸(形状)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40353197/

10-12 17:57