首页 文章

Keras LSTM go_backwards用法

提问于
浏览
0

我有一个关于Keras LSTM模型层中go_backwards参数用法的问题 . 可以在此处找到此图层的文档:https://keras.io/layers/recurrent/#lstm .

问题1:如果我将“go_backwards”标志设置为True,我是否仍然在训练过程中“转发”输入数据 . 例如,如果英语输入句通常显示“我跌倒”,并且它的德语翻译为“Ich fiel”,我会向前馈送(“我跌倒”,“Ich fiel”),还是倒退(“跌倒我” ,“fiel Ich”)在训练过程中 .

问题2:进行模型预测的相同问题是数据前馈(“我跌倒”)还是反转(“跌倒I”)?

问题3:如果我试图使用下面的模型并想要反转语料库数据,我会在两个LSTM层中将go_backwards标志设置为true还是只设置一个?

model = Sequential()
model.add(Embedding(src_vocab, embedding_dim, input_length=source_steps, mask_zero=True))
model.add(LSTM(embedding_dim,go_backwards=True))
model.add(RepeatVector(target_steps))
model.add(LSTM(embedding_dim, return_sequences=True))
model.add(TimeDistributed(Dense(tar_vocab, activation='softmax')))
# compile model
model.compile(optimizer='adam', loss='categorical_crossentropy')
# summarize defined model
model.summary()

我想我应该提供所有数据,但我找不到任何说服我这是正确的文件 .

2 回答

  • 0

    go_backwards 只是反转你给LSTM的任何序列 . code很清楚 .

    if go_backwards: 
        inputs = reverse(inputs, 0)
    

    问题1:如果我将“go_backwards”标志设置为True,我是否仍然在训练过程中“转发”输入数据 . 例如,如果英语输入句通常显示“我跌倒”,并且它的德语翻译为“Ich fiel”,我会向前馈送(“我跌倒”,“Ich fiel”),还是倒退(“跌倒我” ,“fiel Ich”)在训练过程中 .

    是的,您按照发生的顺序(转发)提供数据,而 go_backwards 只是将其反转 .

    问题2:进行模型预测的相同问题是,数据前馈(“我跌倒”)还是反转(“跌倒I”)?

    在推理时间发生同样的事情 .

    问题3:如果我试图使用下面的模型并想要反转语料库数据,我会在两个LSTM层中将go_backwards标志设置为true还是只设置一个?

    不确定为什么要反转解码器(第二个)LSTM的输入 . 在original seq2seq paper中,如果我没记错的话,只有输入被反转而不是目标 . 所以我建议只将 go_backwards 应用到第一个LSTM .

    P.S:我建议通过官方Keras blog中的seq2seq教程/示例,而不是您尝试使用的任何代码 .

  • 0

    我猜Q1和Q2的答案很好,我同意@scarecrow .

    Re Q3,关于你正在解决的问题,反转编码器序列的原因是 very much dependent (稍后详细讨论) . 这个想法是,它有助于在编码器和解码器之间 Build 一个 strong communication ,帮助解码器更有效地解码 . 例如,假设您要将 A B C 翻译为 alpha beta gamma delta . 通过反转任务变为的源序列,

    C B A -> alpha beta gamma delta

    如果 Aalpha 密切相关,这为解码器提供了一个非常好的起点 . 是的,它在每个序列中的最后一个单词之间创建了更多的距离 .

    但是当你结束解码时,你可以通过更多地依赖你解码的内容进行补偿,以便给出一个好的下一个预测 . 例如,在翻译任务中,如果已解码 I snore in my ______ ,则可以很好地解决此问题,而无需相应的源词 . Note :关于预测最后单词的讨论是我的看法 .

    但也要注意,这可能比在某些场合帮助更有害 . 考虑源语言为 subject-verb-object 且目标语言为 object-subject-verb 的情况 . 反转源将给出 object-verb-subject ,这使得解码器的起始字远离源的相应字 .

相关问题