0

我正在使用 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
在此处输入图像描述

4

1 回答 1

0

发现问题:

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

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

y_train shape : (873, 24, 1)

所以它只是在预处理期间将每个标签包装在 [] 之间,架构是健全的并且可以工作(现在我要确定它有多好,但那是另一只野兽啊)

于 2020-06-18T15:43:01.347 回答