对tensorflow feed_dict如何工作感到困惑

时间:2016-08-04 15:37:04

标签: tensorflow

最近开始使用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时,张量流是否会自动向量化每个涉及x的操作?例如,当我们定义op

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

这会在整个批次中自动生效吗?

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

1 个答案:

答案 0 :(得分:2)

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