利用Tensorflow实现小狗图片分类

2016年3月阿尔法围棋(AlphaGo)与围棋世界冠军李世石的人机大战最终AlphaGo以4:1的比分赢得比赛,之后 16年到17年AlphaGo以“大师”账号注册中国的棋类网站,与中日韩十位围棋高手对决取得60局连胜的战绩,使人工智能、机器学习、深度学习再次引发社会各界关注,阿尔法围棋更是入选17年中国媒体十大新词。人工智能、机器学习以及深度学习这三者关系简单来说,人工智能是一个范围广泛的研究领域。机器学习是用来解决这类问题的工具,而深度学习是机器学习一个十分重要的分支,在许多人工智能问题中,深度学习都打破了传统机器学习瓶颈,进而推动了人工智能发展。

卷积神经网络

深度学习基本上就是深度神经网络的代名词,其应用范围甚广,并有扩张之势。俗话说“工欲善其事必先利其器”,要想做深度学习就要选择一个合适的深度学习框架。主流的深度学习框架有TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon等。因谷歌在业界超强号召力以及有较成功项目加持,tensorflow学习框架异军突起,无论是在star数量、fork数量以及contributor数量都超越其他对手,大有一统江湖之势。当然tensorflow框架本身确实在代码简洁性、深度学习算法执行效率以及部署便利等方面存在优势。本文在tensorflow学习框架基础上利用深度学习算法中的卷积神经网络对图像进行训练并识别。

一个最简单的卷积神经网络由输入层、卷积层、池化层、全连接层和输出层(softmax层)(如下图)组成。

简单说明一下各部分作用:输入层在神经网络中通常是一张图片的三维矩阵(长、宽、深度),深度表示图像的色彩通道,简单来说就是黑白图片深度为1,彩色图片深度为3;卷积层是网络中最重要的部分,卷积层的输入只是上一层网络中的一小部分,通常取这一部分大小为3x3或者5x5,通过卷积层的处理之后节点矩阵一般会加深;池化层不会改变三维矩阵的深度,但是可以改变图片的大小,就相当于将一个高分辨率的图片变成低分辨率的,这样做可以减少全连接层参数个数;卷积层和池化层是对图片进行特征提取,图片分类则是由全连接层实现;输出层一般需要经过softmax层,我们都知道softmax回归可以将分类结果转化为概率,通过概率得到其分类类别。在tensorflow中其回归参数被去掉,利用softmax函数得到神经网络各输出类别的概率,取其最大概率值作为其预测类别。

图片分类

为方便说明,以具体的例子讲解,文中取哈士奇、吉娃娃和泰迪的图片作为卷积神经网络的训练样本,每种类型狗的图片都为50张,然后利用训练好网络模型测试。文中对图片进行分类经过以下四步:图片预处理、构造卷积神经网络模型、模型训练及保存和模型测试。

[ 图片预处理 ]

文中三种小狗的图片都是自己从百度下载的,图片大小各不同。在训练模型之前首先需要对图片进行预处理,并将图像数据转换成tensorflow支持的格式。

首先所有图片shape成(64,64)大小;然后对相同大小的图片进行image和label(标签)分类;对图片进行解码之后,对其进行标准化处理;对image和label进行batch处理,得到image_batch和label_batch。经过预处理之后将图片放入inputdata文件夹下的husky、jiwawa和teddy三个文件夹中(图1)(图2是预处理之后的jiwawa文件夹下部分图片),并生成tensoflow支持的输入数据格式dog_train.tfrecords文件。

[ 构造网络模型 ]

文中采用的网络结构为:卷积层1、池化层1、卷积层2、池化层2、全连接层1、全连接层2、softmax层。

卷积层1:过滤器大小(3,3)输入深度为3,输出深度为64,采用0填充

池化层1:过滤器大小(3,3),步长(2,2)

卷积层2:过滤器大小(3,3),输入深度为64,输出深度16,采用0填充

池化层2:过滤器大小(3,3),步长(1,1)

全连接层1:输入节点数为池化层2的输出,输出节点数为128(池化层2输出,128)

全连接层2:输入和输出节点数都为128(128,128)

Softmax层:输入节点数为128,输出节点为3(共分成三类)

[ 模型训练和保存 ]

将inputdata文件夹下的图片利用搭建好的卷积神经网络训练,设置迭代次数为200,每隔10次输出训练结果,从结果图中可以看出其损失值逐渐减少并收敛于0,训练的准确度不断增加最后可以达到100%。利用saver函数对模型的参数进行保存,每执行100次保存一次,不断更新保存到当前文件夹下的model.ckpt目录中。

模型测试

取一张测试图片对训练好的模型测试,具体测试结果如下:

从测试结果上来看,该七层网络结构的卷积神经网络对测试图片分类结果都准确,尤其是对jiwawa和teddy的类别归属的概率值都接近于1,总体来说该模型的分类效果可以接受。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181106B1KI1300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券