Я следую этому руководству, чтобы изучить классификацию изображений с CNN, и я внедрил этот код в свой набор данных:
https://www.tensorflow.org/tutorials/images/classification
Код обновлен
train_image_generator = ImageDataGenerator(rescale=1. / 255) # Generator for our training data
validation_image_generator = ImageDataGenerator(rescale=1. / 255) # Generator for our validation data
train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
directory=train_img_folder,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='categorical',
color_mode='grayscale')
val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size,
directory=valid_img_folder,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='categorical',
color_mode='grayscale'
)
model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH, 1)),
MaxPooling2D(),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Flatten(),
Dense(512, activation='relu'),
Dense(3, activation='softmax')
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
history = model.fit_generator(
train_data_gen,
steps_per_epoch=total_train_value // batch_size,
epochs=epochs,
validation_data=val_data_gen,
validation_steps=total_valid_value // batch_size
)
# Single prediction
img = []
temp = np.array(Image.open('path/to/pic.jpg').resize((256, 256), Image.ANTIALIAS))
temp.shape = temp.shape + (1,) # now its (256, 256, 1)
img.append(temp)
test = np.array(img) # (1, 1024, 1024, 1)
prediction = model.predict(test)
Когда я пытаюсь использовать функциюgnatt_generator:
test_datagen = ImageDataGenerator(rescale=1 / 255.)
test_generator = test_datagen.flow_from_directory('test_images/',
classes=['0', '1', '2'],
color_mode='grayscale',
shuffle=True,
# use same size as in training
target_size=(256, 256))
preds = model.predict_generator(test_generator, steps=4) # I dont know what is steps doing. I put there because of error.
Мой первый вопрос: я могу получить точность обучения и проверки, но я хочу получить прогноз одной картинки результат. Как я могу это сделать? Пример:
foo = model.predict(path/to/pic.jpg)
# foo returns 0-> 0.70 | 1-> 0.30
Добавлено: Когда я пытаюсь использовать модель.predict таким образом, я получаю эту ошибку:
ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (1024, 1024)
или преобразование в 2d (а также 3d) np.array still получил то же самое.
Мой второй вопрос: Есть ли способ предсказать без полного% 100? Я имею в виду, если у нас есть 2 класса (кошка и собака) и тестовая картинка луны, я хочу получить такие результаты:
%15 cat | %10 dog
не
%50 cat | %50 dog
Добавлено: Я пытался выставить класс мусора следующим образом. Когда я запускаю эту строку в строке history = model.fit_generator
, я получаю следующую ошибку:
ValueError: Error when checking target: expected dense_2 to have shape (3,) but got array with shape (2,)
Заранее спасибо