xxx*_*222 6 machine-learning neural-network deep-learning keras tensorflow
由于我看到人们在某个平台上争论说LSTMKeras不支持动态句子长度,我编写了以下代码.
embedding_size = 100
model = Sequential()
model.add(LSTM(32, return_sequences=True, input_shape=(None, embedding_size)))
Run Code Online (Sandbox Code Playgroud)
并且它给出了两个输入val1和val2我馈送(这些输入的形状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
Run Code Online (Sandbox Code Playgroud)
我有以下输出,满足了我的期望,LSTM在Keras是输入长度的动态,如果我们设定的input_shape是(None, embedding_size),我在理解对吗?
(5,20,32)
(5,10,32)
当然 - 正如您所提到的那样,可以将不同长度的序列馈送到Keras模型.情况是,在单个中,batch所有序列应具有相同的长度.从这个意义上说 - 实现动态序列长度支持是不可能的.
如果你更深入地考虑这个案例 - 你会发现即使你可以在不同的批次中输入不同长度的序列 - 这实际上可能会给你的训练过程带来一些偏见 - 因为相同/相似长度的序列总是在一起进行培训.
| 归档时间: |
|
| 查看次数: |
2487 次 |
| 最近记录: |