如果你想利用深度学习方法来识别图像,但却不知道如何上手的话,那么我想这篇文章可以帮助到你。
如果你不知道机器学习和卷积神经网络的话,那么我强烈建议你先看下 Adam Geitgey(https://medium.com/u/ba4c55e4aa3d)的文章
本文将构建一个卷积神经网络模型来读取并识别图像,对每个图像打上相应的标签。
环境配置
首先,我们需要配置下环境,你可以从官网(www.continuum.io/downloads)下载 Anaconda,并选择 Python 2.7版本。
安装完成后,你需要确认 NumPy, SciPy, Sphinx, pyyaml 等包是否已经成功安装,你可以利用搜索栏来搜寻这些软件包。
此外,我们还需要安装 Theano(http://www.deeplearning.net/software/theano),我们将采用最简单的方法来安装该软件库。如下所示:
在 Anaconda 界面中,打开终端界面
此外你也可以利用 git 来安装最新版本程序:
使用 Jupyter Notebook
从 Anaconda 登陆界面中打开 Jupyter notebook 并新建一个文件:
编程阶段
首先,我们需要载入相应的软件库
我们将以MNIST(http://yann.lecun.com/exdb/mnist/)数据集为例,并利用 Keras 来载入数据集。该数据集中包含了 60,000 张大小为 28*28 的图片,测试集中包含 10,000 张图片。
深度学习架构
我们将使用基于 Lenet-5 结构的神经网络[1],具体如下所示:
如果你对上述层级结构感到困惑的话,你可以参阅这个教程(http://neuralnetworksanddeeplearning.com/chap6.html#introducing_convolutional_networks)。
训练并测试模型
利用 CPU 来训练模型的话需要几分钟的计算时间,但是如果使用 GPU 的话仅需要几秒钟。
评估模型的效果:
其中测试集的得分是损失函数值,如 MSE,而测试精度则是预测结果的准确率。测试得分越小,测试精度越高,模型的拟合效果越好。结果显示,上述模型的测试得分为 3%,测试精度为 99%。
分类结果
别忘了我们的测试集中有 10,000 张图片,在这里我们只展示前 25 张图片的预测结果:
接下来我们还能做啥呢?我们还可以调整神经网络的结构,改变隐藏层的类型,改变迭代次数并观察模型的拟合效果是否变得更好。或者我们可以将训练好的模型保存下来以便于处理图像分类预测问题。当然我们也可以将预测错误的图片打印出来:
参考文献
[1] Y. Lecun, L. Bottou, Y. Bengio and P. Haffner, “Gradient-based learning applied to document recognition,” in Proceedings of the IEEE, vol. 86, no. 11, pp. 2278–2324, Nov 1998.
原文作者:Akina M.
译者:Fibears