我有这个 LSTM 模型
model = Sequential()
model.add(Masking(mask_value=0, input_shape=(timesteps, features)))
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2, return_sequences=False))
model.add(Dense(features, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
和形状X_train (21, 11, 5), y_train (21, 5)。
每个时间步由 5 个特征表示并
return_sequences设置为,False因为我想为 11 个时间步的每个输入序列预测一个 5D 数组(下一个时间步)。
我得到错误
ValueError: y_true 和 y_pred 的输出数量不同 (5!=1)
如果我重塑数据,X_train (21, 11, 5), y_train (21, 1, 5)而不是我得到错误
ValueError:y 的形状无效:(14, 1, 5)
注意:值 14 是因为我使用了交叉验证。
我该怎么办?
编辑
我将模型更改为
model = Sequential()
model.add(Masking(mask_value=0, input_shape=(timesteps, features)))
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(features, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
并使用与以前相同的形状。这里model.summary()给出
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
masking_1 (Masking) (None, 11, 5) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 100) 42400
_________________________________________________________________
dense_1 (Dense) (None, 5) 505
=================================================================
这个想法是产生一个多标签分类。训练模型后,我在测试数据上对其进行评估,这就是我得到的:
X[0] = [[0 0 0 0 0],[1 0 0 1 0], ...,[0 0 1 0 0],[0 0 1 0 0]]
y_true[0] = [0 0 1 0 0]
y_pred[0] = 2
这不是我想要的。如何获得与 y_true 形状相同的输出,从而将其转换为多标签分类?