Keras框架下的猫狗识别(一)

Tensorflow学习(使用jupyter notebook)

Keras框架下的猫狗识别(二)
Keras框架下的猫狗识别(三)


前言

  深度学习作为一个近年兴起的重要研究领域,被应用于多个领域。在未来几年,深度学习的热度仍然会持续火热。

一、tensorflow和keras的关系

  TensorFlow和Keras都是深度学习所可以使用的框架。   而且Keras其实就是TensorFlow和Keras的接口(Keras作为前端,TensorFlow或theano作为后端),它也很灵活,且比较容易学。可以把keras看作为tensorflow封装后的一个API。   至今,Tensorflow是已经更新到2.0以上的版本了,相比于Tensorflow1.X的版本,就是在引入keras库和tensorflow库的时候的差别了。   举个例子: 在1.X的版本下的tensorflow中,jupyter notebook里面输入如下
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator

这是不会报错的。
但使用Tensorflow2.X的时候,以上代码就得改成如下:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Convolution2D, MaxPooling2D
from tensorflow.keras.layers import Activation, Dropout, Flatten, Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.preprocessing.image import ImageDataGenerator

才能方便后续的继续操作。

二、图像预处理

  为了完成后续的深度学习的猫狗识别任务,我们先得了解如何处理巨大的猫狗数据集。

1.人为处理

  对于如此庞大的数据集,我们并不先急的直接上代码操作,相反,我们首先要完成的是对这些图片进行分类,将这些图片分为test和train两个文件夹,再在这两个文件夹中进行cat和dog的分类,将猫归入以Cat为名的文件夹,而将狗归入Dog为名的文件夹。   需要注意的是,test中的图片不应该出现在train中,防止数据过度拟合。

2.引入库

代码如下(示例):

from keras.preprocessing.image import ImageDataGenerator,array_to_img,img_to_array,load_img
  首先引入我们需要的函数库,其中引入的这些库中,都是为了后续代码对图片处理进行准备。

3.对图片集的补充

代码如下(示例):

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')      # 填充方式

  使用引入库中的ImageDataGenerator() 方法,而对于这个ImageDataGenerator() 方法,是为了扩充数据集,但数据集图片不足时,可以使用该函数,进行同一照片不同变换。
#  rotation_range是一个0~180的度数,用来指定随机选择图片的角度。  
#  width_shift和height_shift用来指定水平和竖直方向随机移动的程度,这是两个0~1之间的比  
#  rescale值将在执行其他处理前乘到整个图像上,我们的图像在RGB通道都是0~255的整数,这样的操作可能使图像的值过高或过低,所以我们将这个值定为0~1之间的数。  
#  shear_range是用来进行剪切变换的程度,参考剪切变换  
#  zoom_range用来进行随机的放大  
#  horizontal_flip随机的对图片进行水平翻转,这个参数适用于水平翻转不影响图片语义的时候  
#  fill_mode用来指定当需要进行像素填充,如旋转,水平和竖直位移时,如何填充新出现的像素  
  如上,是ImageDataGenerator中相关参数,可通过调节其参数,完成对一个图片的更改,以便后续扩充数据集的。

4.载入图片

img = load_img('image/train/cat/cat.1.jpg')
x = img_to_array(img) 
print(x.shape)
  还是使用引入库中的方法对图片进行处理,load_img()载入train文件夹中的cat类的第一张图片,该路径需要各位根据自己图片存放路径而更改。   而img_to_array()则是对img处理,使其转化为array形式。

5.数据集的扩充

  对数据集的扩充方法也很简单,继续调用ImageDataGenerator库
i = 0
#生成10张图片
#flow 随机生成图片
for batch in datagen.flow(x,batch_size = 1,save_to_dir = 'temp1',save_prefix = 'cat',save_format = 'jpeg'):
    i += 1
    if i > 9:
        break
  利用一个循环,循环10次,从而生成10张图片。   对于datagen.flow()函数:   x是我们之前定义的图片;   xbatch_size默认32,为了方便,我这里将其改成了1;   而save_to_dir是生成图片存放位置;   save_prefix是为了保存提升后图片时使用的前缀, 仅当设置了save_to_dir时生效;在这里我是让该程序生成的图片都以cat为前缀命名。   save_format是图片生成后,保存的格式。

总结

  如上,就是在进行搭建深度学习模型前,对数据集进行预处理。后续会继续完成模型搭建这一块的博客。   由于博主也是刚开始学习,如有不足和问题,请指正。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值