目前新手开始学习深度学习框架的时候大多是从Pytorch开始的,Pytorch是个好东西,笔者也很喜欢用。但是粉丝们也知道我们公众号讲了许多Caffe的内容,包括我们的季划中的一些简单任务也会包含caffe实现,那为什么一个已经不维护了的框架,我们还要支持甚至鼓励学习呢?
Caffe是稳定而优秀的
深度学习开源框架众多,Caffe的基础代码都是C++,Caffe在做计算机视觉任务中的图像分类,分割,检测等任务时,有非常成熟的网络层,也很容易拓展。使用流程简单,可视化清晰。
最早一批入行深度学习的同学应该都用过Caffe,自己写过网络层,甚至推导过反向传播的公式,各家公司在很长一段时间内都是将Caffe的核心代码移植到手机上,并且至今仍然被大量使用,你去面试,保不准就会被问到。
C++,CUDA绕不过
Pytorch等框架好用,主要在于API丰富,框架使用流程和Python语法灵活,非常适合做模型训练,写论文做科研。但是真正在工作岗位做算法工作并不会停留在训练模型,还需要在移动端做部署,写SDK,自定义算子,这些都需要优秀的C++编程能力,甚至是CUDA编程能力。
笔者当年读书的时候做项目都是Matlab和C++,毕业的时候笔试面试全是C++,如今难道会不考察了?
事实上很多同学根本不具备合格的编程能力,甚至C++没接触过或者仅限于基础语法。那么,在看完书籍之后如何去进行实践呢?如何去掌握优秀的C++编码能力?写几道编程题就够了吗?
不够,首先要从阅读优秀的源代码开始,然后在业务中锻炼。纵观这么多的开源项目,在深度学习领域里,Caffe无疑是非常优秀的,最适合拿来学习C++,可以从以下几个方向来做。
(1) 阅读学习Caffe的源代码和设计模式。
Caffe的所有源代码都是C++/CUDA写的,使用工厂设计模式,代码结构清晰,可读性和拓展性强,效率高。
(2) 自己添加新的网络层,包括数据层,损失层等。
把C++类的设计,各种数据结构和标准库熟悉并且用起来,把CUDA代码也写一写,这些都是以后去公司从事模型部署和优化框架工作所必须准备好的技能。
(3) 学会用Caffe部署和分析模型。
学会用Caffe去分析每一个网络层的计算量和计算时间,找到性能瓶颈。学会用它把模型进行封装和加密,在嵌入式平台中使用。
当然了,Pytorch和Tensorflow等一样有C++的内容,笔者只是想说,从Caffe开始,可能更好。