Керас CNN val_accuracy, потеря, точность застрял - PullRequest
0 голосов
/ 14 марта 2020

Я выполняю двоичную классификацию с использованием CNN в Керасе. В наборе данных содержится почти 8 тыс. Изображений, но он не сбалансирован - в одном классе около 1500 выборок, а в другом 6500 выборок. Я не сажаю случайное семя перед тренировкой. Теперь, когда я запускал эту модель несколько дней назад, я получил точность 99%. Я запустил его снова на днях - получил точность 99%. Просто чтобы быть уверенным, я запускал его еще 5 раз, и каждый раз он давал мне одинаковые результаты. Теперь, после 4-дневного перерыва, когда я снова запускаю его для хранения параметров и графиков - моя модель застряла с точностью 85% и точностью проверки 67%. Ничто не меняется в разные эпохи, оно просто застряло там. Я использую flow_from_directory для загрузки изображений на лету, а также выполняю некоторые дополнения при загрузке изображений. Мне известно, что весовые коэффициенты каждый раз инициализируются случайным образом, и поэтому я сохранил весовые коэффициенты модели с наилучшими характеристиками. Но я просто не могу воспроизвести результаты. Есть идеи, что здесь происходит?

model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5),
                 activation='relu',
                 input_shape=(476,476,3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(128, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(256, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

model.compile(loss=binary_crossentropy,
              optimizer=Adam(learning_rate=0.0001),
              metrics=['accuracy'])

1 Ответ

0 голосов
/ 14 марта 2020
Точность

99% в реальном и несбалансированном наборе данных очень маловероятна, особенно если учесть, что ваш ANN не настолько близок к современному уровню техники, что, например, дает точность около 99% для таких наборов данных, как кошки против собак бросают вызов . Кроме того, помните, что с последним у вас есть ~ 25000 изображений в сбалансированной конфигурации.

85% точности обучения и 67% точности проверки звучат как очень разумные числа, ничего не зная о вашем наборе данных. Наверняка вам следует попытаться устранить дисбаланс, увеличив класс, принадлежащий к меньшинству.

Итак, с чего бы вы получали 99% раньше? Сбой в Матрице или крайняя удача. Если это не воспроизводимо, забудьте об этом и сфокусируйтесь на результатах, которые вы получаете сейчас. И последнее, но не менее важное: исправьте начальное число в любых случайных процессах.

...