Я работаю над проблемой классификации классов с использованием Keras.Обучающие и тестовые изображения находятся в 2 отдельных папках, т.е. training_set & test_set.У меня также есть 2 CSV-файла train.csv и test.csv , который содержит детали изображений.Я использую метод Keras flow_from_dataframe.
Я дал код, который я использую для этой задачи ниже.Это дает оценку перекрестной проверки около 75%, но результаты тестового набора очень плохие (точность только 20%).Я знаю, что переоснащение - это одна из возможностей, но я также думаю, что в приведенном ниже коде я упускаю также некоторые важные детали (возможно, с imagedatagenerator).Потому что, когда я пытаюсь решить другую классификацию изображений с помощью flow_from_dataframe, там также я получаю очень плохие результаты на тестовом наборе.
Может ли кто-нибудь подсказать мне, что мне не хватает, или предоставить указатели.
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(64, 64, 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)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(6))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(rescale=1./255,
shear_range=0.20,
zoom_range=0.20,
horizontal_flip=True,
vertical_flip=True)
# this is the augmentation configuration we will use for testing:
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_dataframe(dataframe=train_df,
directory='train/',
x_col='image_name',
y_col='label',
has_ext=True,
seed=42,
target_size=(64, 64),
batch_size=16,
shuffle=False,
class_mode='categorical')
test_generator = test_datagen.flow_from_dataframe(dataframe=test_df,
directory='test/Test set/',
x_col='image_name',
y_col=None,
has_ext=True,
target_size=(64, 64),
class_mode=None,
batch_size=1,
shuffle=False,
seed=42)
STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size
model.fit_generator(generator=train_generator,
steps_per_epoch=STEP_SIZE_TRAIN,
epochs=10)
test_generator.reset()
pred = model.predict_generator(test_generator, verbose=1)
predicted_class_indices = np.argmax(pred, axis=1)
labels = train_generator.class_indices
labels = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]
test_df['label'] = pd.DataFrame(data=predictions)
submission_df.to_csv('submission.csv', index=False)