最近开始使用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会自动知道将每一行用作单独的训练样本,并对所有后续操作进行矢量化吗?
答案 0 :(得分:2)
shape
参数用于静态形状推断(即tensor.get_shape
)并且是可选的。 TensorFlow不会自动向量化任何内容,但对于二进制cwise操作,它使用broadcasting看起来有点像。在您的示例中,tf.conv2d
是一个将每行视为一个示例的操作,因此它适用于批处理,但不适用于单个示例。另外batch[0]
是一批输入,batch[1]
是一批标签。