本文翻译自Using convolutional neural nets to detect facial keypoints tutorial。
用卷积神经网络检测脸部关键点的教程(一)环境配置与浅层网络训练
用卷积神经网络检测脸部关键点的教程(二)卷积神经网络训练和数据扩充
用卷积神经网络检测脸部关键点的教程(三)学习率,学习动量,dropout
用卷积神经网络检测脸部关键点的教程(四)通过前训练(pre-train)训练专项网络
这是一个手把手教你学习深度学校的教程。一步一步,我们将要尝试去解决Kaggle challenge中的脸部关键点的检测问题。
这份教程介绍了Lasagne,一个比较新的基于Python和Theano的神经网络库。我们将用Lasagne去模拟一系列的神经网络结构,讨论一下数据增强(data augmentation)、流失(dropout)、结合动量(momentum)和预先训练(pre-training)。这里有很多方法可以将我们的结果改善不少。
我假设诸位已经知道了一些关于神经网络的只是。所以我们就不介绍神经网络的背景知识了。这里也提供一些好的介绍神经网络的书籍和视频,如Neural Networks and Deep Learning online book。Alec Radford的演讲Deep Learning with Python’s Theano library也是一个快速介绍的好例子。以及ConvNetJS Browser Demos
预先准备
如果你只需要看懂的话,则不需要自己写一个代码然后去执行。这里提供一些安装的教程给那些配置好CUDA的GPU并且想要运行试验的那些人。
我假设你们已经安装了CUDA toolkit, Python 2.7.x, numpy, pandas, matplotlib, 和scikit-learn。安装剩下的依赖包,比如Lasagne和Theano都可以运行下面的指令
pip install -r https://raw.githubusercontent.com/dnouri/kfkd-tutorial/master/requirements.txt
注意,为了简洁起见,我没有在命令中创建虚拟环境,但是你需要的。
译者:我是在windows10上面配置这个环境的,安装anaconda(再用此环境安装依赖包)、VS2013(不推荐2015)、CUDA工具即可。
如果一切都顺利的话,你将会在你的虚拟环境下的src/lasagne/examples/
目录中找到mnist.py
并运行MNIST例子。这是一个对于神经网络的“Hello world”程序。数据中有十个分类,分别是0~9的数字,输入时 28×28 的手写数字图片。
cd src/lasagne/examples/
python mnist.py
译者:如果找不到的话,请看我的下一篇文章,提供代码以及解析。
此命令将在三十秒左右后开始打印输出。 这需要一段时间的原因是,Lasagne使用Theano做重型起重; Theano反过来是一个“优化GPU元编程代码生成面向数组的优化Python数学编译器”,它将生成需要在训练发生前编译的C代码。 幸运的是,我们组需要在第一次运行时支付这个开销的价格。
译者:如果没有配置GPU,用的是CPU的话,应该是不用这么久的编译时间,但是执行时间有一些长。如果用GPU,在第一次跑一些程序的时候,会有提示正在编译的内容。
当训练开始的时候,你会看到
Epoch 1 of 500
training loss: 1.352731
validation loss: 0.466565
validation accuracy: 87.70 %
Epoch 2 of 500
training loss: 0.591704
validation loss: 0.326680
validation accuracy: 90.64 %
Epoch 3 of 500
training loss: 0.464022
validation loss: 0.275699
validation accuracy: 91.98 %
…
如果你让训练运行足够长,你会注意到,在大约75代之后,它将达到大约98%的测试精度。
如果你用的是GPU,你想要让Theano去使用它,你要在用户的主文件夹下面创建一个.theanorc
文件。你需要根据自己安装环境以及自己操作系统的配置使用不同的配置信息:
[global]
floatX = float32
device = gpu0[lib]
cnmem = 1
译者:这是我的配置文件。
[cuba]
root = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
[global]