1

我想對可變輸入大小進行卷積。爲了實現這個目標,我使用的。然而批量大小,其中一個節點是需要輸入的形狀爲一個列表ksize一個最大池節點:TensorFlow提供一個整數

pooled = tf.nn.max_pool(
       h, 
       ksize=[1, self.input_size - filter_size + 1, 1, 1], 
       strides=[1, 1, 1, 1], 
       padding='VALID', 
       name="pool") 

現在,顯然input_size可從輸入(這是一個佔位符)推斷:

self.input_x = tf.placeholder(tf.int32, [None, None], name="input_x") 

但是我不能使用self.input_x.get_shape()[0]因爲形狀是動態的。所以我打算在每一步將feed_dict作爲輸入大小。但是,我無法弄清楚如何在feed_dict中傳遞一個整數。每一個佔位符是一個張量,所以,如果我做的:

self.input_size = tf.placeholder(tf.int32, shape=(), name="input_size") 

我會做self.input_size.eval()得到int值,這給了我,我需要養活input_size錯誤。我想這是因爲eval在訓練步驟發生之前觸發了計算,此時input_size沒有值。

有沒有一種方法可以動態地獲得計算輸入形狀的操作或將整數傳遞給訓練步驟的方法?

回答

0

我不知道,這是最好的方式,但你可以得到的self.input_x動態形狀在列表中有:

input_shape = tf.unpack(tf.shape(self.input_x)) 

tf.shape(self.input_x)給你代表self.input_x和f.unpack形狀的張量將其轉換爲張量列表。

現在,您可以創建你的最大彙集節點:

pooled = tf.nn.max_pool(
       h, 
       ksize=tf.pack([1, input_size[1] - filter_size + 1, 1, 1]), 
       strides=[1, 1, 1, 1], 
       padding='VALID', 
       name="pool") 

(如果你需要input_x的第二維)

+0

它仍然返回張量的列表。我需要第二維的實際值(整數),並在運行時。這就是爲什麼我想「喂」這個參數,但是,它看起來像我只能喂Tensors? –

+0

你可以用「input_size = tf.placeholder(tf.int32)」提供一個整數嗎?它適用於我,但我在TF r0.8,我沒有嘗試最新版本。對於張量列表的問題,我修改了我的答案。我不明白爲什麼,但tf.pack ksize陣列應該可以工作... – Corentin

+0

這是TF中的一個問題。無論你做什麼 - ksize將在施工時進行評估,所以這是不可實現的。 –

相關問題