【问题标题】:Confused on how tensorflow feed_dict works对 tensorflow feed_dict 的工作方式感到困惑
【发布时间】:2016-12-10 20:05:48
【问题描述】:

最近开始使用 tensorflow,我对 feed_dict 的功能感到非常困惑。

查看 tensorflow 网站上的 mnist 示例,x 是一个符号占位符,每次训练迭代都会填充一批新的图像,所以这里的“None”也可以是“batch_size”

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

在查看本教程的卷积部分时,有一个命令可以将 x 从扁平的 1x784 形状重新整形为 2D 图像 28x28 形状

x_image = tf.reshape(x, [-1,28,28,1])

在训练循环期间,x 通过命令输入

train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

我的问题是,当我们向 x 输入值时,tensorflow 会自动向量化每个涉及 x 的操作吗?所以例如当我们定义 op 时

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

这将自动在整个批次中起作用?

如果 x 是 ndarray 且每一行都是扁平图像,因为我们在 x 占位符 tensorflow 中指定形状“None”会自动知道将每一行用作单独的训练样本,并对所有后续操作进行矢量化?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    shape 参数用于静态形状推断(即tensor.get_shape)并且是可选的。 TensorFlow 不会自动对任何东西进行矢量化,但对于二进制 cwise ops,它使用看起来有点像的broadcasting。在您的示例中,tf.conv2d 是将每一行视为示例的操作,因此它适用于批处理,但不适用于单个示例。还有batch[0]是一批输入,batch[1]是一批标签。

    【讨论】:

    • 啊,我想我明白了,来自 tensorflow api:“卷积运算在一批图像上扫描二维滤波器。”并不是说 tensorflow 会自动矢量化操作,而是 conv2d 天生就能够批量处理。