Поскольку у вас есть четыре класса и активация 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,...]
(одно целое число для каждого класса).
Попробуйте взамен 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
.
Относительно ваших вопросов:
- Да, вы, скорее всего, столкнетесь с перегрузкой из-за неправильных меток (они не имеют смысла).Ваша модель в основном изучает случайные метки (данные обучения) и, следовательно, не работает с другими случайными метками (данные проверки).
- Вам следует остановиться, когда
val_acc
перестанет расти.Да, в вашем случае эта точка достигается уже после двух эпох.Но для хороших моделей это обычная практика.У вашего понимания есть недостаток: отличные результаты на тренировочных данных - не цель!Помните, в конце концов, вы хотите, чтобы ваша модель предсказывала изображения, которых она никогда не видела прежде, поэтому только данные проверки говорят вам правду.(На самом деле, еще лучше иметь еще один тестовый набор данных, который никогда не затрагивался во время обучения, и сравнить его с этим в самом конце после вызова fit
или fit_generator
. - .только ваши данные не являются (как объяснено выше). Однако, если после моего предложенного исправления это все еще плохо работает, вам нужно будет поэкспериментировать с большим количеством объектов в ваших сверточных слоях, а также с добавлением еще большего количества сверточных слоев.Средние слои со скоростью от 0,2 до 0,5 - это всегда хороший способ избежать наложения. Вам нужно будет поэкспериментировать с этими настройками.