Я не думаю, что вы должны ссылаться на один и тот же каталог для проверки и обучения.
Попробуйте указать конкретный каталог проверки, например:
validation_generator = test_datagen.flow_from_directory(
# Changing Line
directory = validation_data_dir,
target_size = (parameters["img_width"], parameters["img_height"]),
batch_size = parameters["batch_size"],
class_mode='categorical',
subset = "validation",
color_mode = "rgb",
seed = 42)
Каталоги должны выглядеть примерно так:
train/
69 folders
validation/
69 folders
test/
69 folders
Например, настройка, которую я обычно использую:
train_data_dir = (str(cwd) + r'\augmented\train\\')
validation_data_dir = (str(cwd) + r'\augmented\validation\\')
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
history = 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)
Чтобы увеличить изображения в отдельные каталоги, вы можете сделать что-то вроде следующего, учтите, что это будет немного утомительно, и я рекомендую создать цикл из списка ваших классов.Для моего примера я выполнял только двоичную классификацию 1 или 0. Я взял «исходное» 0 изображение и увеличил его в папках train, validation и test, а затем снова запустил сценарий для 1 изображения.У вас гораздо больше классов, поэтому вы можете сделать цикл из списка.
# rescaling is disabled to allow the images to be viewed
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
# this is a PIL image # path + filename
img = load_img(r'path_to_single_image_to_be_augmented')
# this is a Numpy array with shape (3, 150, 150)
x = img_to_array(img)
# this is a Numpy array with shape (1, 3, 150, 150)
x = x.reshape((1,) + x.shape)
# the .flow() command below generates batches of randomly transformed
# images and saves the results to save_to_dir - remember to change prefix
i = 0
for batch in datagen.flow(x, batch_size=1,
save_to_dir=(str(cwd) + r'\augmented\test\0'),
save_prefix='0', save_format='jpeg'):
i += 1
if i > 110: # change the amount of augmented data you want here
break # otherwise the generator would loop indefinitely
i = 0
for batch in datagen.flow(x, batch_size=1,
save_to_dir=(str(cwd) + r'\augmented\test\0'),
save_prefix='0', save_format='jpeg'):
i += 1
if i > 280:
break
i = 0
for batch in datagen.flow(x, batch_size=1,
save_to_dir=(str(cwd) + r'\augmented\validation\0'),
save_prefix='0', save_format='jpeg'):
i += 1
if i > 280:
break