python - Tensorflow卷积网络——如何计算维度(形状)?

标签 python neural-network tensorflow

我不确定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. 第一层的形状为:h_pool1.get_shape()TensorShape([Dimension(10), Dimension(14), Dimension(14), Dimension(32)] )

问题1:为什么第一个维度是10?

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

问题3:x_image代码中的-1有什么作用?

最佳答案

形状为(batch_size、高度、宽度、 channel )。

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

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

在教程中,该行是:

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

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

第二季度。 Layer1包括卷积层和最大池化层。卷积层"SAME" padding将输出相同大小的东西。尺寸减小来自具有“SAME”填充的 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)

第三季度。 tf.reshape() with a single dimension "-1"保留程序自动计算的尺寸,以便总大小保持不变。

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

相关文章:

python - Keras CNN 隐藏维度

python - 我看到最大位失败并且错误率没有改变

tensorflow - 在 Tensorflow 中估算缺失值?

python - 具有一些不可训练权重的自定义 Keras 层

python - TensorFlow 对象检测 API 结果不佳

Python Pandas 使用新的 x 轴进行插值

python - 两个 numpy 数组的逐元素减法

python - Keras - TypeError : Output tensors to a Model must be Keras tensors - while modelling multiple input , 多输出网络

python - 具有重复列名的 Pandas sumif

python - .strip 不会删除某些字符串上的换行符