2016-05-22 64 views
0

有一種情況,我需要在我的模型的輸出和一個常數之間進行元素比較。但是,模型的輸出具有取決於佔位符的大小,並且似乎很難指向相同大小的常量。參考Tensorflow中未確定的佔位符大小?

這第一次嘗試以某種方式產生一個標量值,而不是做的elementwise操作:

tf.less(y,tf.constant(k,dtype=tf.float32)) 

這第二個嘗試的elementwise behavoir,但它是一個雜牌:

tf.less(y,tf.constant(k,shape= [<INT_GREATER_THAN_BATCHSIZE>],dtype=tf.float32)) 

有沒有乾淨的方式請參考圖中佔位符尚未確定的大小?

回答

1

引用(動態大小)張量形狀的最簡單方法是使用tf.shape(x) op,它在運行時產生一個包含張量x的真實形狀的整數向量。

請注意,tf.constant()不接受動態形狀作爲參數—那麼它不會是恆定的! —但類似tf.fill() op。

因此,你可以這樣寫:

p = tf.placeholder(..., shape=[None]) 
# ... 
result = tf.less(y, tf.fill(tf.shape(p), tf.constant(k, dtype=tf.float32))) 

PS。需要注意的是,如果k是標量,則tf.less()應該播出k形狀匹配y了,下面應該工作:

tf.less(y, tf.constant(k, dtype=tf.float32)) 

...但現在還不清楚爲什麼這不是爲你工作。

+0

謝謝您的詳細解答。不幸的是,我現在沒有時間來調查爲什麼沒有播出。 – seewalker