我正在使用 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].
搜索此错误会导致发布有关retun_sequences=True
从我的 LSTM 层中删除的帖子,但我不希望这样,因为我的每个时间步都被标记...
如果我不填充它们,它们就无法转换为张量以供 tensorflow 使用。
编辑:
我想要实现的架构的解释性说明,由这个答案提供:https ://stackoverflow.com/a/52092176/7732923