Почему моя точность проверки составляет около 65%, и как мне ее увеличить? - PullRequest
0 голосов
/ 17 июня 2019

Я делаю классификацию изображений CNN с 5 классами, каждый из которых имеет 693 изображения с шириной и высотой 224 пикселя, используя VGG16, но моя точность проверки застряла после 15-20 эпох около 60% - 65%.

Я уже использую некоторое увеличение данных, нормализацию пакетов и выпадение, и я заморозил первые 5 слоев, но я не могу повысить точность более чем на 65%.

это мои собственные слои

img_rows, img_cols, img_channel = 224, 224, 3

base_model = applications.VGG16(weights='imagenet', include_top=False, input_shape=(img_rows, img_cols, img_channel))
for layer in base_model.layers[:5]:
    layer.trainable = False

add_model = Sequential()
add_model.add(Flatten(input_shape=base_model.output_shape[1:]))
add_model.add(Dropout(0.5))
add_model.add(Dense(512, activation='relu'))
add_model.add(BatchNormalization())
add_model.add(Dropout(0.5))
add_model.add(Dense(5, activation='softmax'))

model = Model(inputs=base_model.input, outputs=add_model(base_model.output))
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizers.Adam(lr=0.0001),
              metrics=['accuracy'])

model.summary()

и это мой набор данных с моей моделью

batch_size = 64
epochs = 25

train_datagen = ImageDataGenerator(
        rotation_range=30,
        width_shift_range=.1,
        height_shift_range=.1, 
        horizontal_flip=True)
train_datagen.fit(x_train)


history = model.fit_generator(
    train_datagen.flow(x_train, y_train, batch_size=batch_size),
    steps_per_epoch=x_train.shape[0] // batch_size,
    epochs=epochs,
    validation_data=(x_test, y_test),
    callbacks=[ModelCheckpoint('VGG16-transferlearning.model', monitor='val_acc', save_best_only=True)]
)

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

1 Ответ

0 голосов
/ 18 июня 2019

Вот несколько вещей, которые вы можете попробовать:

  • Уменьшите размер пакета.
  • Выберите другой оптимизатор: RMSprop , SGD ...
  • Увеличьте скорость обучения по умолчанию, а затем используйте обратный вызов ReduceLROnPlateau

Но, как обычно, это зависит от данных, которые вы используете.Хорошо сбалансированы?

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