我在深度学习中使用Caffe库。
我对库的运作方式有些困惑。
我所理解的是
net.cpp, net.h
中的API是面向用户应用的接口。
net.cpp, net.h
使用caffe.pb.cc, caffe.pb.h
中的API。
我感到困惑的是
(1)caffe/src/caffe/layers
中的层与caffe.pb.cc, caffe.pb.h
之间的关系是什么?
(2)caffe.pb.h
中的NetParameter
类是做什么用的,它的目的是什么?
(3)caffe.pb
是用来做什么的?
回答:
Caffe使用Google的协议缓冲区(”pb”)来定义网络结构。在创建/下载Caffe模型时,你会看到'train.prototxt'
或'deploy.prototxt'
文件。这些文件是根据Caffe的协议缓冲区语法编写的(定义在caffe.proto
中)。
然后这个协议缓冲区被编译成C++接口,这些接口定义在自动生成的caffe.pb.cc
和caffe.pb.h
文件中。
NetParameter
结构是caffe.proto
中定义的数据类型,负责表示一个“网络”。各种层的功能实现可以在src/caffe/layers/*.cpp
文件中找到。