Нужна помощь в улучшении моей модели компьютерного зрения, точность набора данных составляет всего 88% - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь работать с набором данных Kaggle (10_monkey_dataset), и я не получаю хорошую точность для моей модели.

здесь полная модель написана в карасах.

model.add(Conv2D(32, (3, 3), input_shape=(224, 224, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))

С batch_size = 32 epochs = 350

Я обучил его на Google Colab.

Вот я прилагаю график:

enter image description here

Полный код можно найти на моем GitHub: https://github.com/harsh52/10_monkey_species_kaggle_dataset/blob/master/CNN_monkey.ipynb

Любые предложения по улучшению моей модели будут очень полезны.

Спасибо.

Ответы [ 3 ]

1 голос
/ 22 февраля 2020

Существует действительно много вещей, которые вы можете сделать, чтобы улучшить свою точность:

Архитектура модели

  1. Вы можете добавить больше сверточного слоя на блок c. Blo c - это сочетание нескольких слоев, таких как (CONV -> RELU -> CONV -> RELU -> BATCHNORM -> MAXPOOL)
  2. Вы можете добавить больше блоков, чтобы иметь более глубокую модель
  3. Вы можете добавить batchnorm, как сказал @Daan Klijn, это может придать большей стабильности вашей сети и снизить переоснащение
  4. Вы можете увеличить ширину вашей модели, увеличив количество фильтров
  5. Добавить более сложный блок c, например, сжать и возбудить блок c (https://github.com/titu1994/keras-squeeze-excite-network), остаточный блок c, начальный блок c

Пример архитектуры модели:

Bloc1 : 3 conv with 32 filters
Bloc2 : 3 conv with 64 filters
Bloc2 : 3 conv with 128 filters
Bloc2 : 3 conv with 256 filters

Подготовка данных

  1. Вы можете предварительно обработать данные, нормализовав их
  2. Добавить увеличение данных (вращение, смещение, яркость , ...)

Другое

  1. Настройте свои гиперматериалы, оптимизатор изменений (Адам, SGD, ..), измените скорость обучения

Пример одного блока c с 2 фильтрами и 32 фильтрами:

x = Conv2D(32, (3, 3) , padding='SAME')(model_input)
x = Activation('relu')(x)
x = BatchNormalization()(x)
x = Conv2D(32, (3, 3) , padding='SAME')(x)
x = Activation('relu')(x)
x = BatchNormalization()(x)
x = MaxPooling2D(pool_size=(2, 2))(x)   

Пример одного блока c w ih 3 конв и 64 фильтра:

x = Conv2D(64, (3, 3) , padding='SAME')(model_input)
x = Activation('relu')(x)
x = BatchNormalization()(x)
x = Conv2D(64, (3, 3) , padding='SAME')(x)
x = Activation('relu')(x)
x = BatchNormalization()(x)
x = Conv2D(64, (3, 3) , padding='SAME')(x)
x = Activation('relu')(x)
x = BatchNormalization()(x)
x = MaxPooling2D(pool_size=(2, 2))(x)   
1 голос
/ 22 февраля 2020

Наряду с другими хорошими ответами вы также можете попробовать другие activation functions, чтобы получить на 1% больше точности. Я видел Mish функция активации, дающая хорошие результаты.

https://github.com/digantamisra98/Mish

https://forums.fast.ai/t/meet-mish-new-activation-function-possible-successor-to-relu/53299/76

1 голос
/ 22 февраля 2020

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

  • Регуляризация L1 / L2
  • Добавление большего количества выбывших
  • Нормализация партии
  • Попытка меньшей сети архитектура

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

Также проверьте этот Блокнот , этот парень, похоже, получил лучшая точность с более простой моделью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...