Потери при обучении и проверке равны нулю

#python #tensorflow #keras #lstm

#питон #тензорный поток #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)
 

Когда я тренирую networtk, потери при обучении и проверке постоянно остаются на уровне ‘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:

В вашем последнем слое

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

вы должны установить сначала arg (units) на количество категорий (т. Е. Оно должно быть 6 вместо 1 ) и softmax вместо sigmoid

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

Комментарии:

1. Я уже пробовал это, но получаю ошибку: ValueError: формы (None, 1) и (None, 6) несовместимы

2. @BanstianE Вы уверены, что вы использовали sofmax в качестве функции активации, нет sigmoid ? Также убедитесь, что вы указали метки в one_hot представлении

3. Ознакомьтесь с этой статьей, это может быть полезно machinelearningmastery.com /…