Подтвердить что ты не робот

Как узнать, какая модель Keras лучше?

Я не понимаю, какую точность в результатах использовать для сравнения моих 2 моделей Keras, чтобы узнать, какой из них лучше.

Я использую "acc" (из данных обучения?) один или "val acc" (из данных проверки?) один?

Существуют разные accs и val accs для каждой эпохи. Как узнать acc или val acc для моей модели в целом? Я усредняю ​​все эпохи accs или val accs, чтобы найти acc или val acc модели в целом?

Выход модели 1

Train on 970 samples, validate on 243 samples
Epoch 1/20
0s - loss: 0.1708 - acc: 0.7990 - val_loss: 0.2143 - val_acc: 0.7325
Epoch 2/20
0s - loss: 0.1633 - acc: 0.8021 - val_loss: 0.2295 - val_acc: 0.7325
Epoch 3/20
0s - loss: 0.1657 - acc: 0.7938 - val_loss: 0.2243 - val_acc: 0.7737
Epoch 4/20
0s - loss: 0.1847 - acc: 0.7969 - val_loss: 0.2253 - val_acc: 0.7490
Epoch 5/20
0s - loss: 0.1771 - acc: 0.8062 - val_loss: 0.2402 - val_acc: 0.7407
Epoch 6/20
0s - loss: 0.1789 - acc: 0.8021 - val_loss: 0.2431 - val_acc: 0.7407
Epoch 7/20
0s - loss: 0.1789 - acc: 0.8031 - val_loss: 0.2227 - val_acc: 0.7778
Epoch 8/20
0s - loss: 0.1810 - acc: 0.8010 - val_loss: 0.2438 - val_acc: 0.7449
Epoch 9/20
0s - loss: 0.1711 - acc: 0.8134 - val_loss: 0.2365 - val_acc: 0.7490
Epoch 10/20
0s - loss: 0.1852 - acc: 0.7959 - val_loss: 0.2423 - val_acc: 0.7449
Epoch 11/20
0s - loss: 0.1889 - acc: 0.7866 - val_loss: 0.2523 - val_acc: 0.7366
Epoch 12/20
0s - loss: 0.1838 - acc: 0.8021 - val_loss: 0.2563 - val_acc: 0.7407
Epoch 13/20
0s - loss: 0.1835 - acc: 0.8041 - val_loss: 0.2560 - val_acc: 0.7325
Epoch 14/20
0s - loss: 0.1868 - acc: 0.8031 - val_loss: 0.2573 - val_acc: 0.7407
Epoch 15/20
0s - loss: 0.1829 - acc: 0.8072 - val_loss: 0.2581 - val_acc: 0.7407
Epoch 16/20
0s - loss: 0.1878 - acc: 0.8062 - val_loss: 0.2589 - val_acc: 0.7407
Epoch 17/20
0s - loss: 0.1833 - acc: 0.8072 - val_loss: 0.2613 - val_acc: 0.7366
Epoch 18/20
0s - loss: 0.1837 - acc: 0.8113 - val_loss: 0.2605 - val_acc: 0.7325
Epoch 19/20
0s - loss: 0.1906 - acc: 0.8010 - val_loss: 0.2555 - val_acc: 0.7407
Epoch 20/20
0s - loss: 0.1884 - acc: 0.8062 - val_loss: 0.2542 - val_acc: 0.7449

Выход модели 2

Train on 970 samples, validate on 243 samples
Epoch 1/20
0s - loss: 0.1735 - acc: 0.7876 - val_loss: 0.2386 - val_acc: 0.6667
Epoch 2/20
0s - loss: 0.1733 - acc: 0.7825 - val_loss: 0.1894 - val_acc: 0.7449
Epoch 3/20
0s - loss: 0.1781 - acc: 0.7856 - val_loss: 0.2028 - val_acc: 0.7407
Epoch 4/20
0s - loss: 0.1717 - acc: 0.8021 - val_loss: 0.2545 - val_acc: 0.7119
Epoch 5/20
0s - loss: 0.1757 - acc: 0.8052 - val_loss: 0.2252 - val_acc: 0.7202
Epoch 6/20
0s - loss: 0.1776 - acc: 0.8093 - val_loss: 0.2449 - val_acc: 0.7490
Epoch 7/20
0s - loss: 0.1833 - acc: 0.7897 - val_loss: 0.2272 - val_acc: 0.7572
Epoch 8/20
0s - loss: 0.1827 - acc: 0.7928 - val_loss: 0.2376 - val_acc: 0.7531
Epoch 9/20
0s - loss: 0.1795 - acc: 0.8062 - val_loss: 0.2445 - val_acc: 0.7490
Epoch 10/20
0s - loss: 0.1746 - acc: 0.8103 - val_loss: 0.2491 - val_acc: 0.7449
Epoch 11/20
0s - loss: 0.1831 - acc: 0.8082 - val_loss: 0.2477 - val_acc: 0.7449
Epoch 12/20
0s - loss: 0.1831 - acc: 0.8113 - val_loss: 0.2496 - val_acc: 0.7490
Epoch 13/20
0s - loss: 0.1920 - acc: 0.8000 - val_loss: 0.2459 - val_acc: 0.7449
Epoch 14/20
0s - loss: 0.1945 - acc: 0.7928 - val_loss: 0.2446 - val_acc: 0.7490
Epoch 15/20
0s - loss: 0.1852 - acc: 0.7990 - val_loss: 0.2459 - val_acc: 0.7449
Epoch 16/20
0s - loss: 0.1800 - acc: 0.8062 - val_loss: 0.2495 - val_acc: 0.7449
Epoch 17/20
0s - loss: 0.1891 - acc: 0.8000 - val_loss: 0.2469 - val_acc: 0.7449
Epoch 18/20
0s - loss: 0.1891 - acc: 0.8041 - val_loss: 0.2467 - val_acc: 0.7531
Epoch 19/20
0s - loss: 0.1853 - acc: 0.8072 - val_loss: 0.2511 - val_acc: 0.7449
Epoch 20/20
0s - loss: 0.1905 - acc: 0.8062 - val_loss: 0.2460 - val_acc: 0.7531
4b9b3361

Ответ 1

Я использую "acc" (из данных обучения?) один или "val acc" (из данных проверки?) один?

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

Если ваша точность данных обучения ( "acc" ) продолжает улучшаться, а точность данных валидации ( "val_acc" ) ухудшается, вы, вероятно, находитесь в overfitting ситуация, т.е. ваша модель начинает в основном просто запоминать данные.

Существуют разные accs и val accs для каждой эпохи. Как узнать acc или val acc для моей модели в целом? Я усредняю ​​все эпохи accs или val accs, чтобы найти acc или val acc модели в целом?

Каждая эпоха - это тренировочный прогон по всем вашим данным. Во время этого запуска параметры вашей модели настраиваются в соответствии с вашей функцией потерь. Результатом является набор параметров, которые имеют определенную способность обобщать новые данные. Эта способность отражается в точности проверки. Поэтому подумайте о каждой эпохе как о своей собственной модели, которая может стать лучше или хуже, если она обучена другой эпохе. Было ли это лучше или хуже, судя по изменению точности проверки (лучше = точность проверки была увеличена). Поэтому выберите модель эпохи с наивысшей точностью проверки. Не усредняйте точность в разные эпохи, это не имеет большого значения. Вы можете использовать обратный вызов Keras ModelCheckpoint, чтобы автоматически сохранить модель с наивысшей точностью проверки (см. документацию обратных вызовов).

Самая высокая точность в модели 1 составляет 0.7737, а самая высокая в модели 2 - 0.7572. Поэтому вам лучше смотреть модель 1 (в эпоху 3). Хотя возможно, что 0.7737 был просто случайным выбросом.

Ответ 2

Вам нужно указать на уменьшение val_loss или увеличение val_acc, в конечном счете это не имеет большого значения. Различия находятся в пределах ошибок случайного/округления.

На практике потеря обучения может значительно снизиться из-за чрезмерной установки, поэтому вы хотите посмотреть на потерю проверки.

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

Кроме того, когда вы ничего не научитесь или тривиальная линейная вещь, вам следует выполнить аналогичную работу по обучению и валидации (тривиальное обучение всегда обобщается). Вероятно, вы должны перетасовать данные перед использованием функции validation_split.