从图片到x_train,y_train的过程汇总

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时需要此函数。

你可能感兴趣的:(深度学习)