gpt4 book ai didi

deep-learning - 如何在 Keras 中使用 return_sequences 选项和 TimeDistributed 层?

转载 作者:行者123 更新时间:2023-12-03 08:28:21 24 4
gpt4 key购买 nike

我有一个像下面这样的对话语料库。我想实现一个预测系统 Action 的 LSTM 模型。系统 Action 被描述为位向量。并且用户输入被计算为一个词嵌入,它也是一个位向量。

t1: user: "Do you know an apple?", system: "no"(action=2)
t2: user: "xxxxxx", system: "yyyy" (action=0)
t3: user: "aaaaaa", system: "bbbb" (action=5)

所以我想实现的是“多对多(2)”模型。当我的模型接收到用户输入时,它必须输出一个系统操作。
enter image description here
但是我看不懂 return_sequences选项和 TimeDistributed LSTM 之后的层。实现“多对多(2)”, return_sequences==True并添加一个 TimeDistributed在需要 LSTM 之后?如果您能对它们进行更多描述,我将不胜感激。

return_sequences: Boolean. Whether to return the last output in the output sequence, or the full sequence.

TimeDistributed: This wrapper allows to apply a layer to every temporal slice of an input.



2017/03/13 17:40 更新

我想我能理解 return_sequence选项。但我仍然不确定 TimeDistributed .如果我添加一个 TimeDistributed在 LSTM 之后,模型是否与下面的“我的多对多(2)”相同?所以我认为每个输出都应用了密集层。
enter image description here

最佳答案

LSTM 层和 TimeDistributed 包装器是获得您想要的“多对多”关系的两种不同方式。

  • LSTM 会一个一个吃掉你的句子中的单词,你可以通过“return_sequence”选择在每一步(每个单词处理后)输出一些东西(状态),或者只在最后一个单词被吃掉后输出一些东西。因此,当 return_sequence=TRUE 时,输出将是相同长度的序列,当 return_sequence=FALSE 时,输出将只是一个向量。
  • 时间分布。此包装器允许您将一层(例如 Dense)应用于序列中的每个元素 独立 .该层对于每个元素将具有完全相同的权重,它会应用于每个单词,当然,它将返回独立处理的单词序列。

  • 如您所见,两者的区别在于LSTM“通过序列传播信息,它会吃掉一个词,更新其状态并返回或不返回。然后它会继续下一个词,同时仍然携带信息与之前的那些......一样,在 TimeDistributed 中,单词将以相同的方式自行处理,就好像它们在筒仓中一样,并且同一层适用于它们中的每一个。

    所以你不必连续使用 LSTM 和 TimeDistributed,你可以为所欲为,只需记住它们各自做了什么。

    我希望它更清楚?

    编辑:

    在您的情况下,时间分布将密集层应用于 LSTM 输出的每个元素。

    让我们举个例子:

    您有一个嵌入在 emb_size 维度中的 n_words 个单词序列。所以你的输入是一个形状为 (n_words, emb_size) 的二维张量

    首先,您应用输出维度 = lstm_output 的 LSTM和 return_sequence = True .输出仍然是一个序列,所以它将是一个形状为 (n_words, lstm_output) 的二维张量.
    所以你有 n_words 个长度为 lstm_output 的向量。

    现在你应用一个 TimeDistributed 密集层,比如 3 维输出作为密集的参数。所以时间分布(密集(3))。
    这会将 Dense(3) n_words 次应用到序列中每个大小为 lstm_output 的向量上……它们都将成为长度为 3 的向量。您的输出仍然是一个序列,因此是一个 2D 张量,现在形状为 (n_words, 3) .

    是不是更清楚了? :-)

    关于deep-learning - 如何在 Keras 中使用 return_sequences 选项和 TimeDistributed 层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755820/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com