闫琳英YAN Lin-ying
(西安工商学院,西安 710200)
近几年,人工智能及深度学习技术的应用领域越来越广泛,这使得图像分类识别已成为计算机视觉领域的研究热点,也是解决海量图像分类的关键[1]。卷积神经网络作为图像识别的关键技术,能有效解决图像的分类问题,但其构建模型复杂,模型训练时间较长,也容易出现过拟合等问题[2]。借助TensorFlow 平台的Keras 接口[3]能够简化模型的构建,减少模型的训练时间。因此,本文基于Keras 框架开发一种图像识别模型,通过改进传统模型中的损失函数,并引入DropOut 技术,对Fashion-MNIST 数据集进行识别,具有一定的实用价值。
Keras 是一个基于theano/tensorflow 的深度学习框架,是tensorflow2 引入的高封装度的框架,可以用于快速搭建神经网络模型,是作为一个高阶API,支持快速原型设计,可快速搭建神经网络模型[4]。采用Python 语言编写,支持GPU 和CPU。采用Keras 框架进行深度学习模型的搭建,能够有效减少模型的代码量,提高模型的复用性,进而提高实验效率。
TensorFlow 是由谷歌研发的一款用于高性能计算的开源软件库[5]。其基于数据流图的形式表述计算。被广泛应用于图像处理、自然语言理解等领域。与TensorFlow1.x 版本不同,TensorFlow2.0 采用Eager 模式搭建原型,不需要建立Session 就可直接运行模型[6]。在搭建模型上TensorFlow2.0 更加方便快捷。TensorFlow2.0 更推荐使用tf.Keras、tf.data 等高级接口,简化模型的搭建和训练。
Keras 接口较于其他平台,构建模型更模块化,代码更易理解。采用Keras 序列模型进行建模与训练过程一般分为以下五步:
①创建一个Sequential 模型,并在Sequential()方法中添加从输入层到输出层的网络模型结构;
②通过“compile()”定义训练模式,选择模型训练时使用的优化器、损失函数和模型评估指标;
③训练模型,通过“fit()”方法对模型进行迭代训练;设置训练集和测试集的输入及标签、批次大小和迭代次数等;
④评估模型,通过“evaluate()”对模型进行评估,一般通过模型的损失和准确率评估模型的效果;
⑤应用模型,通过“predict()”对模型进行结果预测。
本文提出的图像分类模型在传统卷积神经网路的基础上,通过优化模型中的损失来提高模型的准确率,并增加Dropout 技术降低模型发生过拟合的概率。本模型总共有七层,分别为输入层、三次卷积、三次池化和两层全连接,最后输出图像的类别。
2.2.1 模型结构(图1)
图1 基于Keras 的图像分类模型
输入层:输入图像大小为28*28 的图片。
卷积层:卷积核大小为3*3,采用Relu 激活函数;经过一次卷积后调用tf.keras.layers.Dropout()方法防止模型过拟合。
降采样层:池化方式一般有两种,最大池化和评平均池化,本模型中选择最大池化方式,可减少网络的参数和计算的数据量,有效防止过拟合。
通过四次卷积和三次池化之后,接着两次全连接层,调用softmax 激活函数对结果进行分类,最终得到样本所属类别的概率。
2.2.2 损失函数
在分类模型中,一般会采用交叉熵损失函数。本文提出的模型最终是要进行图像的多分类,因此采用多分类交叉熵损失函数。针对采用整数类型的标签类别数据,Keras提供的tf.keras.losses.sparse_categorical_crossentropy()方法更为简便,无需对标签数据先进行one_hot 编码就能直接使用。因此本文采用此方法作为模型的损失函数,该函数公式如下:
其中,m 为样本数,k 为标签类别数,对于多分类问题,通常与softmax 激活函数一起使用。
该函数定义为:
tf.keras.losses.sparse_categorical_crossentropy (y_true,y_pred, from_logits=False, axis=-1),其中y_true:实际标签值;y_pred:预测值;from_logits:默认为False,表示输出层经过了概率处理(softmax),当接收到了原始的logits,则为True;axis:计算交叉熵的维度,默认是-1。
2.2.3 DropOut 技术
在深度学习模型中,若参数过多,训练样本太少,模型很容易出现过拟合的现象[7]。过拟合问题是模型在训练集的表现结果好,但是在测试数据集的拟合效果却不理想。为了解决模型的过拟合问题,在模型训练过程中,随机丢弃部分神经元来避免过拟合,这种技术叫做Dropout 技术[8]。具体来说,神经网络的训练过程中,对于每一轮训练中的神经网络单元,Dropout 技术根据概率值(p)将其随机丢掉,在模型训练过程中该神经元就失去作用。在模型训练时,Dropout 会遍历神经网络中所有层的所有节点,以概率p 来决定保留还是丢弃神经元节点。遍历完成后,删除丢弃的神经元对应的连线,从而达到减少节点数、降低网络复杂度的目的。这样就可以有效缓解过拟合的发生,在一定程度上达到正则化的效果。
经Dropout 之后的神经网络模型如图2 所示。
图2 Dropout 技术
Fashion-MNIST 与MNIST 手写字数据集不同,它是一个图像数据集,涵盖了来自10 种类别的共7 万个不同商品的正面图片,是由Zalando 旗下的研究部门提供[9]。Fashion-MNIST 数据集的图片大小为28*28 的灰度图片,训练数据集共60000 个样本,测试数据集共10000个样本。
Fashion-MNIST 数据集有十个分类,分别是:t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套),sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)。(图3)
图3 Fashion-MNIST 数据集样本
在本次实验中,使用keras 建立的模型,经过20 次迭代训练,批次大小为100,最终通过可视化可看到模型在整个训练过程中损失一直减小,准确率达到了97.8%左右。模型的损失Loss 和准确率Accuracy 如图4所示。
本文通过调用TensorFlow 框架的高级接口Keras 进行图像识别模型的构建,以Fashion-MNIST 作为本次模型的数据集,通过调用tf.keras 提供的多分类交叉熵损失函数及Dropout 技术,研究了基于Keras 的卷积神经网络实现图像识别分类。通过模型的多次迭代及参数调整,最终实验结果验证了本文所构建的图像分类模型具有较高的准确率。