標籤:

[TensorFlow入門] 數據與參數的輸入

在上一篇文章中,我使用session運行了一個預先定義好的tensor,假如我想使用一個空的tensor呢?這就需要用到tf.placeholder() 和 feed_dict 。

tf.placeholder()

在TensorFlow(後文簡稱TF)中,數據並不會保存為 integer, float, 或 string. 這些值都封裝在 tensor 對象中,因此不能直接定義並使用一個變數例如x,因為你設計的模型可能需要受不同的數據集與不同的參數。所以TF使用placeholder()來傳遞一個tensor到session.run()中。

Session』s feed_dict

x = tf.placeholder(tf.string)with tf.Session() as sess: output = sess.run(x, feed_dict={x: Hello World})

如上面這段代碼所示,在tf.Session.run()中使用feed_dict來傳入tensor.上面這個例子傳入的是一個字元串"Hello, world",feed_dict也可以同時傳入多個tensor,如下所示。

x = tf.placeholder(tf.string)y = tf.placeholder(tf.int32)z = tf.placeholder(tf.float32)with tf.Session() as sess: output = sess.run(x, feed_dict={x: Test String, y: 123, z: 45.67})

注意:你應該已經注意到所有tensor都已經被預先定義類型,如果在feed_dict中傳入的類型與預先定義的不符合,則TF會報「ValueError: invalid literal for...」錯誤。

一個思考:

那麼,什麼時候該用tf.placeholder,什麼時候該使用tf.Variable之類直接定義參數呢?

答案是,tf.Variable適合一些需要初始化或被訓練而變化的權重或參數,而tf.placeholder適合通常不會改變的被訓練的數據集。

參考:Whats the difference between tf.placeholder and tf.Variable


推薦閱讀:

如何使用最流行框架Tensorflow進行時序預測和時間序列分析
學習筆記TF039:TensorBoard
Windows下TensorBoard的使用
如何看待Face++出品的小型化網路ShuffleNet?

TAG:TensorFlow |