Потеря валидации увеличивается, а точность валидации уменьшается в каждую эпоху в моей модели RNN - PullRequest
0 голосов
/ 07 апреля 2020

Я работаю над выявлением оскорбительного и насильственного содержания. Когда я тренирую свою модель, журнал тренировок выглядит следующим образом:

Train on 9087 samples, validate on 2125 samples
Epoch 1/5
9087/9087 [==============================] - 33s 4ms/step - loss: 0.3193 - accuracy: 0.8603 -         val_loss: 0.2314 - val_accuracy: 0.9322
Epoch 2/5
9087/9087 [==============================] - 33s 4ms/step - loss: 0.1787 - accuracy: 0.9440 - val_loss: 0.2039 - val_accuracy: 0.9356
Epoch 3/5
9087/9087 [==============================] - 32s 4ms/step - loss: 0.1148 - accuracy: 0.9637 - val_loss: 0.2569 - val_accuracy: 0.9180
Epoch 4/5
9087/9087 [==============================] - 33s 4ms/step - loss: 0.0805 - accuracy: 0.9738 - val_loss: 0.3409 - val_accuracy: 0.9047
Epoch 5/5
9087/9087 [==============================] - 36s 4ms/step - loss: 0.0599 - accuracy: 0.9795 - val_loss: 0.3661 - val_accuracy: 0.9082

Вы можете видеть на этом графике.

Как видите, потеря поезда и точность уменьшается, но потери при проверке и точность увеличиваются.

Код для модели:

model = Sequential()
model.add(Embedding(8941, 256,input_length=20))
model.add(LSTM(32, dropout=0.1, recurrent_dropout=0.1))
model.add(Dense(32,activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(4, activation='sigmoid'))
model.summary()

model.compile(loss='binary_crossentropy',
          optimizer=optimizers.Adam(lr=0.001),
          metrics=['accuracy'])

history=model.fit(x, x_test,
      batch_size=batch_size,
      epochs=5,
      verbose=1,
      validation_data=(y, y_test))

Помощь будет оценена.

1 Ответ

1 голос
/ 07 апреля 2020

Это на самом деле зависит от ваших данных, но кажется, что модель подходит к поезду очень быстро (после второй эпохи).

Попробуйте:

  1. Уменьшите скорость обучения
  2. Увеличьте размер пакета
  3. Добавьте регуляризацию
  4. Увеличьте коэффициент отсева

Более того, похоже, что вы используете binary_crossentropy, в то время как ваша модель выводит выходную длину 4 для каждого семпла: model.add(Dense(4, activation='sigmoid')) это может также вызвать проблемы.

...