2016-08-04 64 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