我正在尝试将图像(兔子和狗的数据集)划分为x_train
,x_val
,y_train
,y_val
和测试。
以下是我所做的:
我将每个班级(狗/婴儿)的照片放在训练和测试两个文件夹中的单独文件夹中。
培训目录->兔子目录->兔子图片
培训目录->小狗目录->小狗图片
测试目录->兔子目录->兔子图片
测试目录->小狗目录->小狗图片
我使用以下代码从文件夹中获取图像:
training_data = train_datagen.flow_from_directory('./images/train',
target_size = (28, 28),
batch_size = 86,
class_mode = 'binary',
color_mode='rgb',
classes=None)
test_data = test_datagen.flow_from_directory('./images/test',
target_size = (28, 28),
batch_size = 86,
class_mode = 'binary',
color_mode='rgb',
classes=None)
哪个给我以下输出:
找到152个属于2类的图像。
找到了23个属于2类的图像。
问题1:我不确定如何在此处定义标签(y_val
/ y_train
)或是否需要定义标签(但似乎大多数模型都具有y_val
/ { {1}}。
问题2:我试图跑步
y_train
为了至少将训练数据分为验证/训练,但是当我尝试运行模型时,出现了以下错误:
x_train, x_val = train_test_split(training_data, test_size=0.1)
ValueError:history=classifier.fit_generator(x_train,
steps_per_epoch = (8000 / 86),
epochs = 2,
validation_data = x_val,
validation_steps = 8000/86,
callbacks=[learning_rate_reduction])
应该是元组validation_data
或(val_x, val_y, val_sample_weight)
。
发现:[(array([[[[0.5058095,0.46913707,0.42369673],...
答案 0 :(得分:1)
问题1:
根据我的经验,在命名y,x变量时没有明显的局限性。例如,在this内核中,一个人使用y_train, y_test
名称作为标签,而here在一个人中使用train_Y
。有一条规则,即您应给名称显示变量的含义。
问题2:
我建议使用validation_split
(doc)中的ImageDataGenerator
参数来设置为验证保留的图像部分。之后,我建议使用subset
(doc)中的flow_from_directory
参数来定义training_generator
和validation generator
变量。 (我想指出,flow_from_directory返回生成器,而不是数据)。
所以您的代码如下:
data_generator = ImageDataGenerator(
validation_split=0.2,
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
)
train_generator = data_generator.flow_from_directory(
'./images/train',
target_size = (28, 28),
batch_size = 86,
class_mode = 'binary',
color_mode='rgb',
classes=None, subset="training"
)
validation_generator = data_generator.flow_from_directory(
'./images/train',
target_size = (28, 28),
batch_size = 86,
class_mode = 'binary',
color_mode='rgb',
classes=None, subset="validation"
)
history=classifier.fit_generator(
train_generator,
steps_per_epoch = (8000 / 86),
epochs = 2,
validation_data = validation_generator,
validation_steps = 8000/86,
callbacks=[learning_rate_reduction]
)