Существует действительно много вещей, которые вы можете сделать, чтобы улучшить свою точность:
Архитектура модели
- Вы можете добавить больше сверточного слоя на блок c. Blo c - это сочетание нескольких слоев, таких как (CONV -> RELU -> CONV -> RELU -> BATCHNORM -> MAXPOOL)
- Вы можете добавить больше блоков, чтобы иметь более глубокую модель
- Вы можете добавить batchnorm, как сказал @Daan Klijn, это может придать большей стабильности вашей сети и снизить переоснащение
- Вы можете увеличить ширину вашей модели, увеличив количество фильтров
- Добавить более сложный блок 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
Подготовка данных
- Вы можете предварительно обработать данные, нормализовав их
- Добавить увеличение данных (вращение, смещение, яркость , ...)
Другое
- Настройте свои гиперматериалы, оптимизатор изменений (Адам, 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)