2016-08-04 65 views
0

最近开始使用tensorflow,我对feed_dict的功能非常困惑。混淆张量流feed_dict的工作原理

望着从tensorflow网站MNIST例子,x是一个象征性的占位符,将充满了新一批的每个训练迭代的图片,因此“无”在这里也可能是“的batch_size”

x = tf.placeholder(tf.float32, shape=[None, 784]) 
在本教程的卷积部分看时

,有从它的扁平1x784形状回2D图像28x28形状

x_image = tf.reshape(x, [-1,28,28,1]) 
训练循环期间

是重塑X的命令时,x为通过命令供给

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

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

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

这会自动在整个批次中工作吗?

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

回答

2

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

+0

啊,我想我明白了,从张量流api:“卷积运算扫描一批图像上的二维滤波器。”这并不是说tensorflow自动将操作矢量化,就像conv2d本身能够批量操作一样。 – beeCwright