2017-08-01 34 views
0

我想爲我的LSTM RNN單元提供兩種類型的輸入。我的輸入由整數列表組成(即[5,2,3,4,6,1,0, ...])。Tensorflow RNN:兩種不同類型的輸入

但是,每個整數分爲2個不同的組,所以我想用[[5,True],[2,False], [3,False], [4,True], ... ]這樣的方式標記每個整數。

我看到了輸入由相同類型的常量組成,輸入維數爲2或更大的情況。但我不確定是否有兩種不同類型可以輸入1個單位,如[5,True]。如果這是不可能的,我正在考慮將True代入整數2,並將False代入整數1,如[[5,2], [2,1], ...],其中輸入維數爲2(不確定這是標記的好方法)。

什麼是標記每個整數的好方法,使每個整數都屬於不同的組?

+0

不,您不能擁有混合數據類型的張量。您可以按照您的建議使用整數值來表示布爾值,或者使用具有相同形狀但布爾型數據類型的單獨張量。 – jdehesa

+0

我應該用什麼方式將兩個相同形狀但具有不同數據類型的單獨張量餵給我的LSTM細胞? –

+0

問題是,LSTM(或任何其他RNN細胞或通常的神經網絡層)不能使用布爾值,甚至整數,只能使用float。我的意思是,看[LSTM實際上如何工作](http://colah.github.io/posts/2015-08-Understanding-LSTMs/),你可以看到操作沒有爲布爾值定義(除非你將它們轉換爲1.0和0.0)。 [如Bily建議](https://stackoverflow.com/a/45439871/1782792),您可以創建自定義單元格類型,但首先需要決定使用布爾值執行什麼操作。如果你想使用常規的LSTM,你需要使用浮動。 – jdehesa

回答

0

TensorFlow支持將嵌套元組作爲rnn輸入,請參見doc。但是,您需要編寫自己的單元類來處理這種特定類型的輸入。在這種情況下,它應該是這樣的:

# Define your own cell which accept (integer, bool) input 
class YourCell(tf.contrib.rnn.RNNCell): 
    # override relevant functions of base interface: RNNCell 
    # state_size, output_size, etc. 

    # The main body of computation logic goes in this function 
    def __call__(self, inputs, state, scope=None): 
     # note inputs variable contains inputs of only one time step 
     # for example, inputs = (5, True) 
     interger, boolean = inputs 
     # your computation 

integer_input = [5, 2, 3, 4] 
bool_input = [True, False, False, True] 
inputs = [integer_input, bool_input] 
cell = YourCell() 
outputs = tf.nn.dynamic_rnn(inputs, cell)