【问题标题】:Many to Many LSTM network多对多 LSTM 网络
【发布时间】:2020-06-18 14:45:30
【问题描述】:

我正在使用 LSTM 在 Keras 中构建多对多网络。我有不同长度的序列(标签总是与它们描述的序列具有相同的长度)。为了处理不同的长度,在搜索其他 SO 帖子后,我发现填充 + 遮罩是最好的解决方案。

这是我的模特:

所以我有 n (874) 个 max_len (24) 个填充序列样本,每个样本有 25 个特征。但是我该如何处理我的标签?我也要垫它们吗?

如果我以与 X 相同的方式填充它们(具有相同的特殊值),我会得到:
X_train 形状:(873、24、25)
y_train 形状:(873, 24)

一切都很好,除了我收到以下错误: ValueError: Can not squeeze dim[1], expected a dimension of 1, got 24 for '{{node binary_crossentropy/weighted_loss/Squeeze}} = Squeeze[T=DT_FLOAT, squeeze_dims=[-1]](Cast_1)' with input shapes: [1,24].

搜索此错误会导致发布有关从我的 LSTM 层中删除 retun_sequences=True 的帖子,但我不希望这样,因为我的每个时间步都被标记...

如果我不填充它们,它们将无法转换为张量以供 tensorflow 使用。

编辑:
我想要实现的架构的解释性说明,由这个答案提供:https://stackoverflow.com/a/52092176/7732923

【问题讨论】:

    标签: keras deep-learning many-to-many lstm varying


    【解决方案1】:

    发现问题:

    X_train shape : (873, 24, 25)
    y_train shape : (873, 24)
    

    y_train 包含 873 个长度为 24 的样本,正如我所说的,每个时间步都有一个标签,但是,可能由于需要多标签分类的可能性,每个时间步的每个标签都必须包含在一个列表中,所以对y_train 的形状必须是:

    y_train shape : (873, 24, 1)
    

    所以它只是在预处理过程中将每个标签包装在 [] 之间,架构是合理且有效的(现在我要确定它有多好,但那是另一个野兽啊)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 2021-06-02
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 2015-05-05
      相关资源
      最近更新 更多