2016-10-23 123 views
0

使用Tensorflow seq2seq教程代碼我創建了一個基於字符的聊天機器人。我不使用文字嵌入。我有一組字符(字母和一些標點符號)以及特殊符號,如GO,EOS和UNK符號。輸入LSTM seq2seq網絡 - Tensorflow

因爲我不使用文字嵌入,所以我使用標準tf.nn.seq2seq.basic_rnn_seq2seq() seq2seq模型。然而,我很困惑什麼形狀encoder_inputsdecoder_inputs應該有。它們是否應該是一個整數數組,對應於字母數組中的字符索引,還是應該先將這些整數變成一個熱點向量?

一個LSTM單元有多少個輸入節點?你可以指定嗎?因爲我猜想在我的情況下,LSTM細胞應該對字母表中的每個字母都有一個輸入神經元(因此是一個熱點向量?)。 此外,什麼是LSTM「大小」你必須通過構造函數tf.nn.rnn_cell.BasicLSTMCell(size)

謝謝。

附錄:這些是我正在嘗試解決的錯誤。

當我使用下面的代碼,根據教程:

for i in xrange(buckets[-1][0]): # Last bucket is the biggest one. 
    self.encoder_inputs.append(tf.placeholder(tf.int32, shape=[None], name="encoder{0}".format(i))) 
for i in xrange(buckets[-1][1] + 1): 
    self.decoder_inputs.append(tf.placeholder(tf.int32, shape=[None], name="decoder{0}".format(i))) 
    self.target_weights.append(tf.placeholder(dtype, shape=[None], name="weight{0}".format(i))) 

並運行self_test()功能,我得到的錯誤: ValueError: Linear is expecting 2D arguments: [[None], [None, 32]]

然後,當我改變了形狀,在上面代碼爲shape=[None, 32]我收到此錯誤: TypeError: Expected int32, got -0.21650635094610965 of type 'float' instead.

回答

0

事實證明,傳遞給BasicLSTMCellsize自變量既表示LSTM隱藏狀態的大小,也表示輸入層的大小。所以如果你想要一個不同於輸入大小的隱藏大小,你可以首先通過一個額外的投影層傳播你的輸入,或者使用內置的seq2seq字嵌入函數。

0

lstm單元格的輸入數量是任何張量的維數p在實例化事物時作爲tf.rnn函數的輸入。

size參數是您的lstm中隱藏單位的數量(因此較大的數字較慢但可以導致更準確的模型)。

我需要一個更大的堆棧跟蹤來了解這些錯誤。