使用卷积神经网络进行图像识别(cifar10)

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)

此篇文章我将使用tensorflow的keras库尝试搭建精简过的alexnet演示卷积神经网络

导入cifar10训练集

发现训练标签与测试标签多了一个无用的轴,为了后续方便处理数据,去除无用的轴

查看是否成功导入

建立keras神经网络

建立的神经网络一共有12层,第一层是卷积层,卷积核大小为3*3,使用relu作为激活函数
第二层是池化层,默认缩放1/2
第三层也是卷积层
第四层为池化层
第五第六层和第七层连续三次卷积
第八层为池化层
第九层为平坦层,将二维图片转换为线性数据
第十层与第十一层为全连接层,激活函数同样使用relu
第十二层为输出层,由于样本有10类,所以神经元数量为10

AlexNet使用ReLU代替了Sigmoid,其能更快的训练,同时解决sigmoid在训练较深的网络中出现的梯度消失问题

模型总结

这里可以发现faltten层之前数据就已经被不断卷积为64个1*1的特征了,(后续操作证明即使这样模型也是可以跑的),这也是我删除一层卷积层的原因,因为到后面池化不了了

训练模型

使用adam作为优化器(优化器决定了梯度下降的方式),使用SparseCategoricalCrossentropy作为损失函数(损失函数用于评估模型输出与真实数据之间的误差)

使用测试数据测试模型准确度

使用softmax作为激活函数可以将输出的数据转换为更为容易理解的范围

为绘图做准备

从上面的测试结果中可以看出,模型对于大部分的图片预测还是很准确的

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注