Я новичок в Keras и CNN и поэтому борюсь со следующим.
Когда я тренируюсь, используя набор данных изображений, используя следующий код:
train_batches = gen1.flow_from_directory(train_path, target_size=(224,224),classes = ['garbage', 'recycled', 'organic'], batch_size = batch)
valid_batches = gen1.flow_from_directory(valid_path, target_size=(224,224), classes = ['garbage', 'recycled', 'organic'], batch_size = batch)
test_batches = gen1.flow_from_directory(test_path, target_size=(224,224), classes = ['garbage', 'recycled', 'organic'], batch_size = batch)
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=( 224, 224, 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(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(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(3))
model.add(Activation('softmax'))
model.compile(optimizer=Adam(lr=.0001), loss= 'categorical_crossentropy', metrics = ['accuracy'])
history = model.fit_generator(train_batches, steps_per_epoch =training_data_size//batch, validation_data = valid_batches, validation_steps=validation_data_size//batch, epochs=5, verbose=2)
model.save_weights('Try1.h5')
Я получаю 77% точности проверки после 5 эпох, как видно на рисунке:
введите описание изображения здесь
Но когда я пытаюсь создать для него матрицу путаницы, я получаю 35% точности проверки:
predictions = model.predict_generator(valid_batches, steps=validation_data_size//batch,verbose=1)
conf_mat2 = confusion_matrix(valid_batches.classes, np.argmax(predictions,axis=1))