Потери валидации увеличиваются после 3 эпох, но точность валидации продолжает расти - PullRequest
3 голосов
/ 24 марта 2019

Обучение и проверка работоспособны в течение 2 эпох, но после 2-3 эпох Val_loss продолжает увеличиваться, в то время как Val_acc продолжает увеличиваться.

Я пытаюсь обучить модель CNN, чтобы классифицировать данный отзыв как отдельный.класс 1-5.Поэтому я считал это мультиклассовой классификацией.Я разделил набор данных на 3 набора - 70% обучения, 20% тестирования и 10% проверки.

Распределение данных обучения для 5 классов следующим образом.

1 - 31613, 2 -32527, 3 - 61044, 4 - 140005, 5 - 173023.

Поэтому я добавил веса классов следующим образом.

{1: 5.47, 2: 5.32, 3: 2.83, 4: 1.26, 5: 1}

Структура модели выглядит следующим образом.

input_layer = Input(shape=(max_length, ), dtype='int32')

embedding = Embedding(vocab_size, 200, input_length=max_length)(input_layer)

channel1 = Conv1D(filters=100, kernel_size=2, padding='valid', activation='relu', strides=1)(embedding)
channel1 = GlobalMaxPooling1D()(channel1)

channel2 = Conv1D(filters=100, kernel_size=3, padding='valid', activation='relu', strides=1)(embedding)
channel2 = GlobalMaxPooling1D()(channel2)

channel3 = Conv1D(filters=100, kernel_size=4, padding='valid', activation='relu', strides=1)(embedding)
channel3 = GlobalMaxPooling1D()(channel3)

merged = concatenate([channel1, channel2, channel3], axis=1)

merged = Dense(256, activation='relu')(merged)
merged = Dropout(0.6)(merged)
merged = Dense(5)(merged)
output = Activation('softmax')(merged)
model = Model(inputs=[input_layer], outputs=[output])

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])

model.fit(final_X_train, final_Y_train, epochs=5, batch_size=512, validation_data=(final_X_val, final_Y_val), callbacks=callback, class_weight=class_weights)

1/5 - потеря: 1.8733 - категориальная_точность: 0.5892 - val_loss: 0.7749 - val_categorical_accuracy: 0.6558

2/5 - потеря: 1,3908 - категориальная точность: 0,6917 - val_loss: 0,7421 - val_categorical_acraracy: 0,6784

3/5 - потеря: 0,9587 - категориальная_точность: 0,7734 - val_loss: 0,7595 * 0,67 * 0,67 * 0,67

4/5 - потеря: 0,6402 - категориальная точность: 0,8370 - допустимая потеря: 0,7921 - val_categorical_accuracy: 0,7216

5/5 - потеря: 0,4520 - категорическая точность: 0,8814 - val_loss: 0,8556 - 0,724 * оценка: 0,65

Окончательная точность = 0,7328754744261703

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

Я совершенно новичок в области глубокого обучения, если у кого-то есть предложения по улучшению, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 25 марта 2019

val_loss продолжает увеличиваться, в то время как Val_acc продолжает увеличиваться Это может быть из-за функции потерь ... функция потерь рассчитывается с использованием фактических предсказанных вероятностей, а точность вычисляется с использованием одного горячего вектора.

Давайте рассмотрим пример из 4 классов.Для одного из обзоров true класс, скажем, 1 .Прогнозируемые вероятности по системе [0,25, 0,30, 0,25, 0,2].Согласно categoryorical_accuracy ваш вывод верен, т. Е. [0, 1, 0, 0], но так как ваша вероятность вероятности так распределена ... ategorical_crossentropy также приведет к большим потерям.

Что касается переоснащения.Я не совсем уверен, почему введение большего количества данных вызывает проблемы.

Попробуйте увеличить количество шагов.Не делайте данные более несбалансированными, добавляя данные в какой-либо конкретный класс.

...