Почему мой результат предсказания очень плохой по сравнению с точностью

113
12

Я пишу код для классификации изображений (2 категории, "хороший" и "плохой") на питоне с использованием Keras, точность данных обучения составляет около 99%, а данные валидации - около 95%. (изображение составляет 60-кратный файл PNG с разрешением в 17 пикселей)

img_width, img_height = 60, 30
nb_train_samples = 4000
nb_validation_samples = 600
epochs = 30
batch_size = 32

if K.image_data_format() == 'channels_first':
input_shape = (1, img_width, img_height)
else:
input_shape = (img_width, img_height, 1)

model = Sequential()
model.add(Conv2D(16, (3, 3), input_shape=input_shape,padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3),padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['binary_accuracy'])

train_datagen = ImageDataGenerator(rescale= 1. /255)
validation_datagen = ImageDataGenerator(rescale= 1. /255)

train_generator = train_datagen.flow_from_directory(
'/home/admin/Desktop/dataset/train',
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary',
color_mode='grayscale')

validation_generator = validation_datagen.flow_from_directory(
'/home/admin/Desktop/dataset/validation',
target_size=(img_width, img_height),
batch_size= batch_size,
class_mode='binary',
color_mode='grayscale')

model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size)

model.save_weights('test_weights.h5')

теперь я хочу сделать прогноз для всех 600 изображений в каталоге проверки, используя этот код.

path='/home/admin/Desktop/dataset/validation/good'
for file in os.listdir(path):
im=cv2.imread(os.path.join(path,file))
im=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
im=np.reshape(im,[1, img_width,img_height,1])*(1. /255)
result=model.predict_classes(im)

Однако результат для 300 изображений в "плохом" каталоге равен 9 [1] с 291 [0], а для 300 изображений в "хорошем" каталоге - 42 [1] с 258 [0], это, очевидно, неверно.

Я думаю, что мой способ обработки данных отличается от ImageDataGenerator и flow_from_directory, что приводит к ошибке, но я не уверен.

********Обновить********

Когда я использую следующий код, результат правильный

predict_data=ImageDataGenerator(rescale=1. / 255).flow_from_directory(
'/home/admin/Desktop/dataset/validation/good',
target_size=(img_width, img_height),
batch_size= 300,
class_mode=None,
color_mode='grayscale')

result=model.predict_generator(
predict_data,
steps=1)

Но я до сих пор не знаю, где ошибка.

спросил(а) 2017-05-24T10:16:00+03:00 3 года, 9 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема