从图片到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时需要此函数。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值