CNN - как я могу правильно получить val_loss и val_acc, используя керасы?

$newlink = str_replace('https://', 'http://', $oldlink);

Я думаю, это могло бы помочь удалить https: // в http: //

0
задан dogac 28 February 2019 в 06:06
поделиться

1 ответ

Поскольку у вас есть четыре класса и активация softmax на последнем слое, мне кажется очень маловероятным, что ваш выбор class_mode='binary' для flow_from_directory() и loss='sparse_categorical_crossentropy' для classifier.compile() правильный. Сгенерированные таким образом метки не будут иметь смысла.

class_mode='binary' будет генерировать метки в форме [0,1,1,0,1,1,...], которые имеют смысл только для прогнозирования да / нет (следовательно, «двоичный»), в то время как loss='sparse_categorical_crossentropy' ожидает метки в форме [1,3,2,4,3,2,1,2,...] (одно целое число для каждого класса ). [1 122]

Попробуйте вместо class_mode='categorical' и loss='categorical_crossentropy'. Это сгенерирует ярлыки с горячим кодированием, например

[[0,0,1,0],
 [0,1,0,0],
 [0,0,0,1],
 ...      ]

, что именно то, что loss='categorical_crossentropy' ожидает получить. Также выбор activation='softmax' в последнем слое идеально подходит для этого, так как он гарантирует, что четыре значения в последнем слое всегда суммируют ap с 1.

Относительно ваших вопросов:

  1. Да, вы, скорее всего, столкнетесь с перегрузкой из-за неправильных меток (они не имеют смысла). Ваша модель в основном изучает случайные метки (данные обучения) и, следовательно, не работает хорошо с другими случайными метками (данные проверки).
  2. Вам следует остановиться, когда val_acc перестанет расти. Да, в вашем случае эта точка достигается уже после двух эпох. Но для хороших моделей это обычная практика. У вашего понимания есть недостаток: отличные результаты на тренировочных данных - не цель! Помните, в конце концов, вы хотите, чтобы ваша модель предсказывала изображения, которых она никогда не видела прежде, поэтому только данные проверки говорят вам правду. (На самом деле, еще лучше иметь еще один тестовый набор данных, который никогда не затрагивался во время обучения, и сравнить его с этим в самом конце после вызова fit или fit_generator.
  3. . только ваши данные не являются (как объяснено выше). Однако, если после моего предложенного исправления это все еще плохо работает, вам нужно будет поэкспериментировать с большим количеством объектов в ваших сверточных слоях, а также с добавлением еще большего количества сверточных слоев. Средние слои со скоростью от 0,2 до 0,5 - это всегда хороший способ избежать наложения. Вам нужно будет поэкспериментировать с этими настройками.
0
ответ дан sebrockm 28 February 2019 в 06:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: