Caffe的项目架构和源码解析(3)

此外,我还测试过一维数据,并且修改了convert_imagenet.cpp源码,将数据读入lmdb,大致代码如下:

datum.set_channels(num_channels); datum.set_height(num_height); datum.set_width(num_width); datum.clear_data(); datum.set_encoded(false); datum.set_data(lines[line_id].first); datum.set_label(lines[line_id].second);

通过改这个代码,可以将一维数据读入网络,进行处理。此外,在执行这个一维数据的过程中,也出了一个错,报错信息”Too big key/data, key is empty, or wrong DUPFIXED size”,这个问题是因为lmdb是保存的key-value对,而lmdb对key的长度进行了限制,长度不能超过512,但是我在传递的时候key的值给多了,因此得到了解决。

5.小结

通过阅读源码可以看到,caffe作为一个架构,层次、思路、需要解决的问题都非常清晰,它的高效体现在很多方面,不仅采用了读取快速的lmdb,而且计算部分基本上都是用很高效的blas库完成的。而它的数据、层次、网络的构成和执行是分开控制的,这点就提供了比较大的灵活性,唯一的遗憾就是安装比较繁琐,总是会出现某个依赖包没装好的情况。总的来说,caffe在科研领域使用的非常广泛,大量的研究都是基于caffe预训练好的imagenet的网络而得到了很好的进展,作者这种分享的精神值得肯定。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2b8e84b5eaf465290a3430aeec0151c3.html