训练和验证损失为零

时间:2021-01-08 18:18:45

标签: python tensorflow keras lstm

我正在尝试训练一个文本分类网络,其中文本被标记为 6 个不同的类别。每个文本只能有一个标签。 到目前为止,我构建了以下简单的网络:

## Network architecture
model = Sequential()
model.add(Embedding(20000, 100, input_length=50))
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

## Fit the model
history = model.fit(data, np.array(labels), validation_split=0.2, batch_size = 32, epochs=25)

当我训练网络时,训练和验证损失始终保持在 '0.0000e+00。

Epoch 1/25
26/26 [==============================] - 8s 225ms/step - loss: 0.0000e+00 - accuracy: 0.2847 - val_loss: 0.0000e+00 - val_accuracy: 0.3188
Epoch 2/25
26/26 [==============================] - 6s 213ms/step - loss: 0.0000e+00 - accuracy: 0.2887 - val_loss: 0.0000e+00 - val_accuracy: 0.2754
Epoch 3/25
26/26 [==============================] - 6s 230ms/step - loss: 0.0000e+00 - accuracy: 0.2350 - val_loss: 0.0000e+00 - val_accuracy: 0.2705
Epoch 4/25
26/26 [==============================] - 6s 217ms/step - loss: 0.0000e+00 - accuracy: 0.2180 - val_loss: 0.0000e+00 - val_accuracy: 0.2657
Epoch 5/25
26/26 [==============================] - 6s 220ms/step - loss: 0.0000e+00 - accuracy: 0.2262 - val_loss: 0.0000e+00 - val_accuracy: 0.2609
Epoch 6/25
26/26 [==============================] - 6s 224ms/step - loss: 0.0000e+00 - accuracy: 0.2542 - val_loss: 0.0000e+00 - val_accuracy: 0.2609
Epoch 7/25
26/26 [==============================] - 6s 223ms/step - loss: 0.0000e+00 - accuracy: 0.2379 - val_loss: 0.0000e+00 - val_accuracy: 0.2512
.
.
.

有人知道这是什么原因吗?

1 个答案:

答案 0 :(得分:0)

在你的最后一层

model.add(Dense(1, activation='sigmoid'))

您必须将第一个参数(单位)设置为类别的数量(即它应该是 6 而不是 1)和 softmax 而不是 sigmoid

model.add(Dense(6, activation='softmax'))