不同批次的 LSTM 相同句子在填充序列时预测不同的分数
LSTM same sentence in different batch predict different score when padding sequence
比如我用LSTM做一个4类分类器
test_data = [
'I have a flower',
'The stars are beautiful,because of a flower that cannot be seen.',
'You know one loves the sunset,when one is so sad.'
]
test_gen = create_generator(test_data, batch_size=1) # do padding
res = model.predict_generator(test_gen)
句子I have a flower
预测分数可能喜欢:
[0.92, 0.07, 0.001, 0.009]
当我让batch_size
为16时,预测分数可能
[0.84, 0.12, 0.02, 0.02]
因为句子 I have a flower
比 test_data
中的其他句子短,所以
它被填充到相同的长度,填充项可能是 0
或其他东西。
最后导致了这么大的不同(0.08=0.92-0.84是一个很大的数字)。
我只想知道:这是正常现象吗?
否则,如何消除这种不确定性?
为Embedding
添加参数mask_zero=True
或添加Masking
层可以消除这种“不确定性”,例如:
inputs = keras.Input(shape=(None,), dtype="int32")
x = layers.Embedding(input_dim=5000, output_dim=16, mask_zero=True)(inputs)
outputs = layers.LSTM(32)(x)
model = keras.Model(inputs, outputs)
可以跳过padding值0
,所以模型不会从padding值0
学习知识,同一句话在不同batch输出相同的分数。
比如我用LSTM做一个4类分类器
test_data = [
'I have a flower',
'The stars are beautiful,because of a flower that cannot be seen.',
'You know one loves the sunset,when one is so sad.'
]
test_gen = create_generator(test_data, batch_size=1) # do padding
res = model.predict_generator(test_gen)
句子I have a flower
预测分数可能喜欢:
[0.92, 0.07, 0.001, 0.009]
当我让batch_size
为16时,预测分数可能
[0.84, 0.12, 0.02, 0.02]
因为句子 I have a flower
比 test_data
中的其他句子短,所以
它被填充到相同的长度,填充项可能是 0
或其他东西。
最后导致了这么大的不同(0.08=0.92-0.84是一个很大的数字)。
我只想知道:这是正常现象吗? 否则,如何消除这种不确定性?
为Embedding
添加参数mask_zero=True
或添加Masking
层可以消除这种“不确定性”,例如:
inputs = keras.Input(shape=(None,), dtype="int32")
x = layers.Embedding(input_dim=5000, output_dim=16, mask_zero=True)(inputs)
outputs = layers.LSTM(32)(x)
model = keras.Model(inputs, outputs)
可以跳过padding值0
,所以模型不会从padding值0
学习知识,同一句话在不同batch输出相同的分数。