Caffe的深度学习训练全过程 - InfoQ: Software …

2018-10-08 10:25


首先是训练数据和预测数据的预处理。这里的工作一般是把待分析识别的图像进行简单的预处理,然后保存到数据库中。为什么要完成这一步而不是直接从图像文件中读取数据呢?因为实际任务中训练数据的数量可能非常大,从图像文件中读取数据并进行初始化的效率是非常低的,所以很有必要把数据预先保存在数据库中,来加快训练的节奏。由此可以看出,原始图像和数据库相比,读取数据的效率差距还是蛮大的。虽然在Caffe训练中数据读入是异步完成的,但是它还是不能够太慢,所以这也是在训练时选择数据库的原因。从定义中可以很清楚的看出其内容的含义。其中history是一个比较有意思的信息,他存储了历史的参数优化信息。这个信息有什么作用呢?由于很多算法都依赖历史更新信息,如果有一个模型训练了一半停止了下来,现在想基于之前训练的成果继续训练,那么需要历史的优化信息帮助继续训练。如果模型训练突然中断训练而历史信息又丢失了,那么模型只能从头训练。这样的深度学习框架就不具备断点训练的功能了,只有重头再来的功能。现在的大型深度学习模型都需要很长的时间训练,有的需要训练好几天,如果框架不提供断点训练的功能,一旦机器出现问题导致程序崩溃,模型就不得不重头开始训练,这会对工程师的身心造成巨大打击所以这个存档机制极大地提高了模型训练的可靠性。从刚才提到的断点训练可以看出,深度学习其实包含了再训练这个概念。一般来说再训练包含两种模式,其中一种就是上面提到的断点训练。从前面的配置文件中可以看出,训练的总迭代轮数是10000轮,每训练5000轮,模型就会被保存一次。如果模型在训练的过程中被一些不可抗力打断了(比方说机器断电了),那么大家可以从5000轮迭代时保存的模型和历史更新参数恢复出来,命令如下所示:这里不妨再深入一点分析。虽然模型的历史更新信息被保存了下来,但当时的训练场景真的被完全恢复了么?似乎没有,还有一个影响训练的关键因素没有恢复数据,这个是不容易被训练过程精确控制的。也就是说,首次训练时第5001轮迭代训练的数据和现在断点训练的数据是不一样的。但是一般来说,只要保证每个训练批次(batch)内数据的分布相近,不会有太大的差异,两种训练都可以朝着正确的方向前进,其中存在的微小差距可以忽略不计。除此之外,日志中输出的其他信息也可以被观察分析,比方说测试环节的精确度等,它们也可以通过上面的方法解析出来。由于采用的方法基本相同,这里有不去赘述了,各位可以自行尝试。除了完成测试的验证,有时大家还需要知道模型更多的运算细节,这就需要深入模型内部去观察模型产生的中间结果。使用Caffe提供的借口,每一层网络输出的中间结果都可以用可视化的方法显示出来,供大家观测、分析模型每一层的作用。其中的代码如下所示:这一组图展示了卷积神经网络是如何把一个数字转变成特征编码的。这样的方法虽然可以很好地看到模型内部的表现,比方说conv1的结果图中有的提取了数字的边界,有的明确了前景像素所在的位置,这个现象和第3章中举例的卷积效果有几分相似。但是到了conv2的结果图中,模型的输出就变得让人有些看不懂了。实际上想要真正看懂这些图像想表达的内容确实有些困难的。优点是Caffe在计算过程中,在内存使用和运算速度方面都有一定的优势,内存使用较小,速度也比较有保证,相对而言,基于符号计算的框架在这两方面会稍弱一些。冯超,毕业于中国科学院大学,现就职于猿辅导公司,从事视觉与深度学习的应用研究工作。自2016年起在知乎开设了自己的专栏《无痛的机器学习》,发表一些机器学习和深度学习的文章,收到了不错的反响。

服务支持

我们珍惜您每一次在线询盘,有问必答,用专业的态度,贴心的服务。

让您真正感受到我们的与众不同!