3

由於我看到有人在Keras的LSTM不支持動態句子長度的某些平臺上爭論,我寫了下面的代碼。Keras中的LSTM是否支持動態句子長度?

embedding_size = 100 
model = Sequential() 
model.add(LSTM(32, return_sequences=True, input_shape=(None, embedding_size))) 

和它的作品完美地給出了兩個輸入val1val2我喂(這些輸入的形狀batch_size * sentence length * embedding size),

val1 = np.random.random((5,20,embedding_size)) 
val2 = np.random.random((5,10,embedding_size)) 
input = model.input 
output = model.output 

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    k1 = sess.run(output, feed_dict={input:val1}) 
    k2 = sess.run(output, feed_dict={input:val2}) 
    print k1.shape 
    print k2.shape 

和我有以下輸出,滿足了我的期望,LSTM在如果我們將input_shape設置爲(None, embedding_size),我的理解是正確的,Keras在輸入長度上是動態的?

(5,20,32)

(5,10,32)

回答

4

當然 - 選擇提到它可能饋送不同長度序列Keras模型。這種情況是,在一個batch中,所有序列應具有相同的長度。從這個意義上說 - 實現動態序列長度支持是不可能的。

如果您更深入地考慮這種情況 - 即使您可能有不同批次的不同長度序列 - 這實際上可能會給您的訓練過程帶來一些偏差 - 作爲相同/相似長度的序列總是彙集在一起​​進行培訓。

+0

我明白了,非常感謝! – xxx222