训练的数据输入可以全部载入内存,下面这两种方法
#按照批次进行训练(传入的是一个批次的样本和标签)样本少,将所有的样本作为一个批次
cost = model.train_on_batch(x_data,y_data)
#划分批次进行训练(传入的是所有的数据进行分批次训练)样本数量多。
model.fit(x_train,y_train,batch_size=32,epochs=10)
也可以自己从硬盘中分批次读取。
#定义数据处理
train_datagen = ImageDataGenerator(
rotation_range = 40, # 随机旋转度数
width_shift_range = 0.2, # 随机水平平移
height_shift_range = 0.2,# 随机竖直平移
rescale = 1/255, # 数据归一化
shear_range = 20, # 随机错切变换
zoom_range = 0.2, # 随机放大
horizontal_flip = True, # 水平翻转
fill_mode = 'nearest', # 填充方式
)
batch_size = 32
# 生成训练数据,这个不会一次载入
train_generator = train_datagen.flow_from_directory(
'image/train',
target_size=(150,150),
batch_size=batch_size,
train_generator.class_indices#打印类别
#测试集
test_datagen = ImageDataGenerator(
rescale = 1/255, # 数据归一化
)
# 测试数据
test_generator = test_datagen.flow_from_directory(
'image/test',
target_size=(150,150),
batch_size=batch_size,
)
model.fit_generator(train_generator,
steps_per_epoch=len(train_generator),#路径内有400个照片每个epoch有多少个周期呢?这里不用批次了
epochs=30,#一共训练多少个周期
validation_data=test_generator,#验证集的迭代器
validation_steps=len(test_generator))#验证集一个周期分多少个批次呢