1、这个是从.npz 到x_train,y_train,至于从jpg到npz以后再总结:
(x_tain,y_train),(x_test,y_test) = mnist.loda_data('mnist.npz')
if K.image_data_format() == 'channels first':
x_train = x_train.reshape([batch_size,1,img_rows,img_cols]) #step 1
x_test = x_test.reshape([batch_size,1,img_rows,img_cols])
input_shape = [1,img_rows,img_cols]
else:
x_train = x_train.reshape([batch_size,img_rows,img_cols,1])
x_test = x_test.reshape([batch_size,img_rows,img_cols,1])
input_shape = [img_rows,img_cols,1]
x_train = x_train.astype('float32') #step 2 GPU对单精度的计算性能更好
x_test = x_test.astype('float32') #更正,第一遍写的这两块的先后顺序弄反了
x_train /=255
x_test /=255 #step 3
y_train = keras.utils.to_catagorical(y_train,num_classes)
y_test = keras.utils.to_categorical(y_test,num_classes)
得到了x_train ,y_train 就可以作为model.fit(x_train,y_train )的输入了
逻辑:以模型为中心,首先了解模型需要的输入,Keras 这里的model.fit()方法 就是需要x_train,y_train,shape 是 [总样本数,img_rows,img_cols,通道数],注意这个方法里的是总样本数,要实现batch_size ,方法里是有个参数:batch_size = 64 的
2、下面我们来看看其他方法,对输入的要求:
ImageDataGenerator 包 + mode.fit_generator((datagen.flow(x_train,y_train,batch_size=32)))方法
这里也是和上面的一样,需要的输入也是:x_train ,y_train
例子:
from keras.preprocessing.image import ImageDataGenerator
(x_train,y_train),(x_test,y_test) = cifar10.load_data()
y_train = np_utils.to_categorical(y_train,nums_classes)
y_test = np_utils.to_categorical(y_test,nums_classes)
datagen = ImageDataGenerator() #里面是一大堆旋转、镜像等操作的参数,先不用管,先搭好框架
model.fit_generator(datagen.flow(x_train,y_train,batch_size=32))
#注意这个组合是属于生成器式的生成数据给模型去训练的范畴了,不再是上面的整个样本,然后再通过batch_size 的作用去一批一批的喂给神经网络。
3、
ImageDataGenerator 包 + mode.fit(.flow_from_directory())方法
适用与分类任务
使用.flow_from_directory(directory)的例子:
from keras.preprocessing.image import ImageDataGenerator
trian_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory('data/train',target_size=(img_rows,img_cols),batch_size=32,class_mode='binary',save_to_dir =path)#2分类,通过文件夹的个数分类并转化成独热编码形式生成y_train ,保存生成好的图片到path路径中
model.fit_generator(train_generator)
同时变换图像和mask ,适用于分割、检测任务
data_gen_args = dict(featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=90)
img_datagen = ImageDataGenerator(**data_gen_args) #非固定参数
mask_datagen = ImageDataGenerator(**data_gen_args)
img_datagen.fit(imgs,argement=True ,seed)
mask_datagen.fit(masks,argement=True,seed)
img_generator = img_datagen.flow_from_directory('data/imgs',class_model=None,seed=seed)
mask_generator = mask_datagen.flow_from_directory('data/masks',class_model=None,seed=seed)
train_generator = zip(img_generator,mask_generator)
model.fit_generator(train_generator,steps_per_epoch=2000,epochs=50)
fit(x, augment=False, rounds=1):计算依赖于数据的变换所需要的统计信息(均值方差等),只有使用featurewise_center,featurewise_std_normalization或zca_whitening时需要此函数。