发布时间:2024-03-08 17:01
首先我们需要先到网上下载猫狗数据集:
猫狗分类数据集下载地址:https://pan.baidu.com/s/1i4SKqWH
密码:d8mt
刚开始下载的数据train和test都是猫和狗混合的图片,需要修改一下重新划分一下train和test中的猫和狗分别划分出来。文件结构如下:
|_image
|_train
|_dog
|_cat
|_test
|_dog
|_cat
由于训练时长的问题,这里只用到了2000张图片进行训练,1000图片进行验证。可以自行决定训练和测试数据集的大小。
代码运行平台为jupyter-notebook,文章中的代码块,也是按照jupyter-notebook中的划分顺序进行书写的,运行文章代码,直接分单元粘入到jupyter-notebook即可。
from keras.preprocessing.image import ImageDataGenerator,array_to_img,img_to_array,load_img
datagen = ImageDataGenerator(
rotation_range=40, # 随机旋转角度
width_shift_range=0.2, # 随机水平平移
height_shift_range=0.2, # 随机竖直平移
rescale=1./255, # 数值归一化
shear_range=0.2, # 随机裁剪
zoom_range=0.2, # 随机放大
horizontal_flip=True, # 水平翻转
fill_mode="nearest" # 填充方式
)
这里我们以一张图片先来演示数据处理的效果:
# 载入图片
img = load_img("./image/train/cat/cat.1.jpg")
# 将图片转化为array数据格式
x = img_to_array(img)
# (280, 300, 3) = (H,W,channels)
print(x.shape)
# 给图片增加一个维度 加这个维度主要是因为训练的时候需要一个四维的图片
x = x.reshape((1,)+x.shape)
# (1, 280, 300, 3) = (batch_size,H,W,channels)
print(x.shape)
i = 0
# 生成21张图片
# flow随机生成图片 save_prefix为新生成名字的前缀
for batch in datagen.flow(x,batch_size=1,save_to_dir='temp',save_prefix="cat",save_format="jpeg"):
# 执行20次
i += 1
if i>20:
break