参考文献:https://keras.io/zh/preprocessing/image/
import keras.datasets.cifar10 as cifar10 # 这里源码中没有写,我自己加上了
(x_train, y_train), (x_test, y_test) = cifar10.load_data() # 加载cifar10数
# 将标签全部转换为one—hot类型的
y_train = np_utils.to_categorical(y_train, num_classes)
y_test = np_utils.to_categorical(y_test, num_classes)
# ImageDataGenerator中的输入参数是dict类型的
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True)
# 计算特征归一化所需的数量
# (如果应用 ZCA 白化,将计算标准差,均值,主成分)
datagen.fit(x_train) # x_train为4维张量
# 使用实时数据增强的批数据对模型进行拟合:
model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
steps_per_epoch=len(x_train) / 32, epochs=epochs)
# 这里有一个更 「手动」的例子
for e in range(epochs):
print('Epoch', e)
batches = 0
# 一次读了32个训练数据进来
for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=32):
model.fit(x_batch, y_batch) # 训练
batches += 1
if batches >= len(x_train) / 32:
# 我们需要手动打破循环,
# 因为生成器会无限循环
break
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
# flow_from_directory()第一个参数是数据所在目录,且在这个目录下包含多个独立的子文件夹,每个文件夹下面放着同种类别的数据,这些独立的子文件夹将自动视为不同的类别,也就省去了做标签的过程了
# 其中的binary指的是二分类问题,categorical指one-hot多分类,sparse指整数多分类,input用于自编码
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=2000,
epochs=50,
validation_data=validation_generator,
validation_steps=800)
# 创建两个相同参数的实例
# data_gen_args 是一个字典变量
data_gen_args = dict(featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=90,
width_shift_range=0.1,
height_shift_range=0.1,
zoom_range=0.2)
# 这里用到的**data_gen_args其实就是定义了一种dict传入函数的方式
image_datagen = ImageDataGenerator(**data_gen_args)
mask_datagen = ImageDataGenerator(**data_gen_args)
# 为 fit 和 flow 函数提供相同的种子和关键字参数
seed = 1
image_datagen.fit(images, augment=True, seed=seed)
mask_datagen.fit(masks, augment=True, seed=seed)
image_generator = image_datagen.flow_from_directory(
'data/images',
class_mode=None, # None的作用是只返回数据增强后的数据,而不生成标签,这对model.predict_generator(), model.evaluate_generator()是很有用的
seed=seed)
mask_generator = mask_datagen.flow_from_directory(
'data/masks',
class_mode=None,
seed=seed)
# 将生成器组合成一个产生图像和蒙版(mask)的生成器
train_generator = zip(image_generator, mask_generator)
# fit_generator可以完成咋cpu上进行实时数据增强,然后同时使用GPU进行模型的训练
model.fit_generator(
train_generator,
steps_per_epoch=2000,
epochs=50)
补:
2.用dict变量给keras中的ImageDataGenerator()赋值
from keras.preprocessing.image import ImageDataGenerator
data_gen_args = dict(rotation_range=90) #等效于以下的表达方式:{'rotation_range':90}
image_datagen = ImageDataGenerator(**data_gen_args) # 这里加不加**都可以
本人现在的研究方向是:
图像的语义分割,如果有志同道合的朋友,可以组队学习
[email protected] qq:1355365561