基于Keras CNN与Fashion_MNIST数据集开发一个深度学习程序

     上篇文章《基于Keras DNN与Fashion_MNIST数据集开发一个深度学习程序》介绍了基于Keras API,构建一个深度神经网络DNN,用于分类Fashion_MNIST数据集,其精度大约在90%左右,不管怎么训练,也无法提高了。

     下一步的思路是,是否能修改深度神经网络的构架,使得精度继续提高呢?

      图像处理的常用的一个方法是滤波,滤波的本质是特征提取。换句话说,能否在神经网络中加入滤波器,由滤波器来提取图像特征,从而取代人为直接指定?滤波器核(Kernel)的参数由训练自动习得,这样或许比人为提取特征更合理。上篇文章《基于Keras DNN与Fashion_MNIST数据集开发一个深度学习程序》中的DNN,本质是人为指定了特征,即像素的亮度值。经过训练发现,其精度在90%左右,不能提高了。

      由此,本文将加入图像滤波器(image filter)来自动提取特征,图像滤波器的核(kernel)的参数,由训练自动习得。由于实现图像滤波的数学计算方法是卷积(Convolution),所以,我们在神经网络中,直接加入卷积计算,即卷积层。

       经过卷积后,需要训练的参数大大增加,所以,我们需要一个图像压缩技术,在保证精度的情况下,让需要处理的参数(计算量)尽量少一点。池化(Pooling)就是一种图像数据压缩技术。

       本文将创建具有Conv2D->MaxPooling->Con2D->MaxPooling->Dense128->Dense10网络结构的神经网络,看看检测精度是否可以继续提高。

基于Keras CNN与Fashion_MNIST数据集开发一个深度学习程序_第1张图片
CNN 模型

可以看到,程序框架基本与上篇文章中的DNN类似,不一样的地方就是创建model的时候,加入了ConvD->MaxPooling2D->Conv2D-MaxPooling2D,这些用于自动提取特征的卷积计算层,和用于压缩图像的池化层。

基于Keras CNN与Fashion_MNIST数据集开发一个深度学习程序_第2张图片

运行后,可以看到,加入CNN自动提取图像特征后,相比于之前直接人为指定像素亮度作为特征,精度有提高接近3%,证明研发方向和思路是正确的。

进阶阅读《CNN需要训练的参数个数(Param #)计算》

参考阅读《深度学习图像识别技术》

你可能感兴趣的:(基于Keras CNN与Fashion_MNIST数据集开发一个深度学习程序)