2017-02-07 45 views
2

我瞭解到我可以通過修改來自protobuf的JSON來編程TensorFlow。請參閱hereTensorFlow形狀和類型推理

如果我修改此JSON,則有時會出現問題,我需要手動編輯JSON以傳播各種輸入和輸出的適當形狀。有沒有辦法讓TF自動爲我做這個,以便我可以通過佔位符指定輸入,然後形狀和類型自動傳播?

回答

3

如果您知道要製作哪種類型的修改,則可以從佔位符中刪除該形狀信息。不確定性會自動傳播。例如:

import tensorflow as tf 
placeholder = tf.placeholder(dtype=tf.float32, shape=[None]) 
derived = (placeholder/3)[1:, None] 
print(placeholder.get_shape(), derived.get_shape()) 

打印:

(TensorShape([Dimension(None)]), TensorShape([Dimension(None), Dimension(1)])) 

所以會有保存的placeholder長度沒有靜態的形狀信息。你甚至可以擁有未知等級的張量。

重新計算靜態形狀是一種誘人的想法,但目前尚不支持此功能,因爲圖形構造可能依賴於靜態形狀信息。例如:

placeholder = tf.placeholder(dtype=tf.float32, shape=[2]) 
if placeholder.get_shape()[0].value % 2 == 0: 
    derived = placeholder 
else: 
    derived = tf.concat(0, [placeholder, [0]]) 

這是不推薦的圖形構造技術(更好的使用tf.shapecond),但它確實發生了。不幸的是,這種靜態形狀條件圖結構並未在元圖中被捕獲。

+0

根據輸入調用'sess.run(out,feed_dict = {...})後形狀是否會傳播?如果是這樣,那麼這對我來說是完美的。類型可以以同樣的方式傳播嗎?問題是,我無法確定我的領域將會在沒有編寫大量代碼的情況下變成什麼形狀或類型。 –

+0

是的,張量的「真實」形狀在圖形執行時間('sess.run')是已知的,並且可以用'tf.shape'(它返回一個整數張量)作爲圖的一部分來計算。不幸的是,我知道dtype沒有任何相似之處。 –