Я новичок в Keras и TensorFlow. Я пытаюсь обучить сверточную нейронную сеть для классификации изображений. У меня есть большое количество изображений транспортных средств, и мне нужно получить классификацию ориентации. Здесь - это подход с использованием гистограммы ориентированных градиентов (HOG) (мне также нужен класс крыши автомобиля, всего девять классов).
Ниже приведен код Python для моего CNN.
model = Sequential([
Conv2D(32, (5, 5), input_shape=(1536, 2048, 3)),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
# One output network layer with 9 nodes (corresponding to the 9 final classes/orientations)
Dense(9, activation='softmax')
])
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy']
)
model.fit(
train_images, # Training data
to_categorical(train_labels), # Training targets
epochs=4,
batch_size=16
)
Как видите, мой CNN состоит всего из трех слоев. Мой учебный набор данных состоит из выборки из 100 различных транспортных средств, каждый из которых имеет все девять требуемых ориентаций, в общей сложности 900 изображений. С четырьмя эпохами мне удалось достичь 90% точности на этапе обучения, но только ~ 50% точности на этапе тестирования. Эта модель плохо себя ведет в прогнозировании результатов для изображений, которые она никогда не видела раньше.
Моя модель CNN очень проста. Мне пришлось уменьшить количество эпох с 5 до 4, потому что оно начало переоснащаться в пятой эпохе. Мои вопросы: как я могу улучшить свою модель? Является ли мой набор данных достаточно большим? Нужно ли добавлять дополнительные слои в модель?
Заранее спасибо.
Обновление
Вот модель с обзором:
model = Sequential([
Conv2D(32, (3, 3), input_shape=(224, 224, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3)),
Conv2D(256, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(256, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
# One output network layer with 9 nodes (corresponding to the 9 final classes/orientations)
Dense(9, activation='softmax')
])