caffe 之 protobuf
来源:互联网 发布:淘宝商品有质量问题 编辑:程序博客网 时间:2024/05/29 03:02
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Vinjn张静
链接:http://zhuanlan.zhihu.com/hacker-and-painter/20435591
来源:知乎
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Vinjn张静
链接:http://zhuanlan.zhihu.com/hacker-and-painter/20435591
来源:知乎
Protobuf 定义
Protobuf 是google开源的一个序列化协议,可以通过在proto文件中定义结构化类型,生成平台无关的C++、Java、Python等多种语言的序列化,反序列化源码。比如我们定义
enum Phase { TRAIN = 0; TEST = 1;}message NetState { optional Phase phase = 1 [default = TEST];}
保存成proto.txt,运行 protoc--cpp_out=. proto.txt,生成proto.txt.pb.h和proto.txt.pb.cpp,从中可以看到类NetState的定义
enum Phase { TRAIN = 0, TEST = 1};class NetState : public ::google::protobuf::Message { …… ::Phase phase() const; void set_phase(::Phase value); ……};
简单的5句话就可以实现NetState的反序列化:
NetState state;int fd = open(filename, O_RDONLY);ZeroCopyInputStream* raw_input = new FileInputStream(fd);CodedInputStream* coded_input = new CodedInputStream(raw_input);bool success = state->ParseFromCodedStream(coded_input);
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Vinjn张静
链接:http://zhuanlan.zhihu.com/hacker-and-painter/20435591
来源:知乎
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Vinjn张静
链接:http://zhuanlan.zhihu.com/hacker-and-painter/20435591
来源:知乎
Caffe 中的 Protobuf
了解 Protobuf 原理后,我们再来看caffe的结构,协议定义在caffe/src/caffe/proto/caffe.proto,通过makefile调用protoc,将C++代码生成在
src/caffe/proto/caffe.pb.hsrc/caffe/proto/caffe.pb.cc
Python代码生成在
install/python/caffe/proto/caffe_pb2.py
接下来我们从caffe的使用来看看用户配置了哪些文件,来回推 Protobuf 的协议以及它是怎么样加载进去的。
以 examples/mnist 为例,我们使用最简单的命令来训练网络
Build/tools/caffe train -solver= lenet_solver.prototxt
看看lenet_solver.prototxt的内容,包含了learningrate, learning policy, test interval,最重要的一行是
net:"examples/mnist/lenet_train_test.prototxt"
可以知道 lenet_train_test.prototxt 定义了train/test时候的网络结构,打开文件我们可以看到定义的不同layer,这里以第一个datalayer为例,
layers { name: "mnist" type: DATA top: "data" top: "label" data_param { source:"examples/mnist/mnist_train_lmdb" backend: LMDB batch_size:64 } transform_param { scale: 0.00390625 } include: { phase: TRAIN }}
两个 top 告诉我们,当前这个 layer 接到 data 和 label 的前面作为整个网络的输入。
0 0
- caffe 之 protobuf
- caffe protobuf介绍
- Caffe代码解读:Protobuf
- CAFFE中 安装google protobuf
- caffe 解析 protobuf相关知识点
- Caffe代码导读(1):Protobuf例子
- caffe源码分析(1)——protobuf
- Caffe代码导读(1):Protobuf例子
- Caffe代码导读(1):Protobuf例子
- Caffe代码导读(1):Protobuf例子
- Caffe代码导读(1):Protobuf例子
- Caffe代码导读(1):Protobuf例子
- caffe + anaconda: install : conda install protobuf
- 编译caffe的一个protobuf问题
- Caffe代码导读(1):Protobuf例子
- caffe 源码导读(一)了解protobuf
- ubuntu16.04配置caffe出现protobuf问题
- caffe:cannot import name symbol_database/ protobuf problem in caffe
- PE文件详解(六)--基址重定位
- LeetCode 217 Contains Duplicate(包含重复数字)(Vector、hash)
- oracle temporary tables
- logger(一):C++ & logger模块配置及开发
- [easyui]封装一个datagrid
- caffe 之 protobuf
- WheelView实现省市区三级联动(数据库实现版本附带完整SQL及数据)
- 资源管理概念的形象化
- PE文件详解(七)--资源表
- 在IJ上调式远程jetty和tomcat
- iOS 开发 版本控制 svn + Versions/Cornerstone
- Active X方法的返回值
- 持续集成
- JavaScript进阶(六)用JavaScript读取和保存文件