Keras LSTM 中的目标尺寸不匹配

数据挖掘 Python 神经网络 喀拉斯
2022-02-10 18:20:31

我已经为文本分类建立了这个网络:

model = Sequential()
model.add(Embedding(vocabulary_dim, 150, input_length=max_length)) 
model.add(LSTM(150, return_sequences=False))
model.add(Dense(1, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

当我拟合模型时:

model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=5, batch_size=128)

我收到此错误:

ValueError: Error when checking model target: expected dense_9 to have shape (None, 1) but got array with shape (12481, 3)

我想因为y_trainy_valone-hot编码,形状:

array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 1.,  0.,  0.],
       .............])

但我不确定这一点。

1个回答

对于单个输出单元model.add(Dense(**1**, activation='softmax')),Keras 期望得到二元结果,因此“softmax”激活函数和“categorical_crossentropy”损失是不合适的。

如果您的输出是二进制的,请使用:model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy'.

如果您的结果不是二元的,则需要调整输出单元的数量以匹配输出类别的数量。