【问题标题】:LSTM same sentence in different batch predict different score when padding sequence不同批次中的 LSTM 相同句子在填充序列时预测不同的分数
【发布时间】:2021-09-18 09:37:34
【问题描述】:

例如,我用 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 predict score 这句话可能是这样的:

[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 是一个很大的数字)。

我只想知道:这是正常现象吗? 否则,如何消除这种不确定性?

【问题讨论】:

  • 批量大小不同会有不同的结果是正常的
  • 那么,有办法解决这个问题吗?作为 AI 中重要的 Model,不可能赤裸裸地应用到产品上吧?
  • 不确定我是否理解但回答“这是正常现象?否则,如何消除这种不确定性?”答案是 1) 是的,2) 这不是不确定性。很简单,使用 16 的 batch_size 或其他任何设置都是不同的设置,会产生不同的结果。这里几乎没有什么需要解决的。

标签: python keras deep-learning lstm


【解决方案1】:

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)

keras-masking_and_padding

它可以跳过填充值0,因此模型不会从填充值0中学习知识,并且不同批次的相同句子输出相同的分数。

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2019-09-04
    • 2014-08-17
    • 2022-01-14
    • 2012-07-19
    相关资源
    最近更新 更多