Я пытаюсь классифицировать ограничивающие рамки в наборе данных COCO. Наилучшая точность проверки, которую я сейчас получаю, составляет 60% для подмножества из 8 классов (потеря: 1,1541 - соотв .: 0,6028 - val_loss: 1,2102 - val_acc: 0,5893) после 15 эпох. Используемые изображения преобразуются в оттенки серого и имеют размер 64x64. Общее количество фотографий, используемых для обучения модели, составляет 40604, а набор проверки составляет четверть / половину этого.
функция для построения моей нейронной сети выглядит так:
def constructCNN(conv_layer, layer_size, kernel_size, dense_size, dense_layer, dropout, num_classes):
model = Sequential()
model.add(Conv2D(layer_size, (kernel_size, kernel_size), input_shape=trainset.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
for l in range(conv_layer-1):
model.add(Conv2D(layer_size, (kernel_size, kernel_size)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
if(dropout):
model.add(Dropout(0.25))
model.add(Flatten())
for j in range(dense_layer):
model.add(Dense(dense_size))
model.add(Activation('relu'))
if(dropout):
model.add(Dropout(0.25))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
return model
Я пробовал следующие конфигурации: dens_layers = [0,1,2,3], layer_sizes = [32,64,128], dens_sizes = [32,64,128], conv_layers = [1,2,3,4], kernel_sizes = [3,4], dropout = [True / False].
Я также пытался использовать ImageDataGenerator, но это не улучшило мои результаты.
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
zca_whitening=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True)
Я ищу предложения, которые могут улучшить производительность моего классификатора.