caffe之CIFAR-10与dropout

CIFAR-10实例
caffe中的CIFAR-10实例重现了Alex Krizhevsky的cuda-convnet中的结果,具体的模型定义、参数、训练步骤等都是按照cuda-convnet中的进行设置的。不过,该实例仍是半成品,目前官网上介绍的只是quick train,对于进一步解释网络细节和训练选择的full training还未完工。
cuda-convnet是Alex Krizhevsky、Ilya Sutskever和Geoffrey E. Hinton在论文ImageNet Classification with Deep Convolutional Neural Networks中的实验代码。它是一套公开的CNN代码,运行于Linux系统上,使用GPU做运算。(但据网友所说,该代码并不能复现论文中的结果,论文中的multi-GPU和dropout也没有实现,而且也没有给出论文中8层卷积神经网络的配置文件)
至于该实例中的数据准备、模型定义以及训练和测试,和MNIST实例中的相差不大,按照步骤一步步来就行了,问题不大。
需要补充一点的是,在训练时,界面中会跳出一系列监控参数,如下所示:

caffe之CIFAR-10与dropout_第1张图片

其中,lr指当前迭代时的学习率(learning rate)。loss指训练误差。在测试阶段, #0指accuracy,#1指测试损失(每迭代500次会进行一次测试)。
要比较cpu和gpu的训练速度,只需要在cifar*solver.prototxt(*为通配符,例如cifar10_quick_solver.prototxt)中更改solver_mode的参数即可。

这里写图片描述

在CIFAR-10实例中加入dropout
由于该篇篇幅比较短,就把在caffe实例中加入dropout的方法写到这里了。
假如我们要在CIFAR-10实例中的ip1和ip2层之间加入dropout,那么我们可以定义一个drop1的层,其类型为Dropout,设置底层blob为ip1,顶层blob也为ip1(为了与原来的层匹配,也可以用其它名字,但是要保证各层之间必须能够衔接上)。然后设置dropout_ratio。至此,就为CIFAR-10实例加入了dropout,若要在MNIST实例中加入dropout,那么方法与此类似。加入dropout后,重新运行程序进行训练即可。具体代码见下图所示,两条下划线中间的部分即加入的dropout部分。
caffe之CIFAR-10与dropout_第2张图片

参考文献:
http://blog.csdn.net/stdcoutzyx/article/details/39722999

你可能感兴趣的:(caffe)