关于google protocol buffer(PB)的优缺点和一些个人的理解
来源:互联网 发布:编程培训机构推荐 编辑:程序博客网 时间:2024/06/04 19:22
由于caffe的神经模型通过protocol buffer定义,所以自己搜刮了一些资料,加上自己的一些理解,如下:
protocol buffer用一句话概括就是一个数据传输协议,用来将你程序中需要保存的数据以结构化的形式保存起来,并以相应的的格式读取.有人会问,直接用C++的读写文件函数不就行了么,为什么还要用这个工具.这主要是因为当你需要存取的数据量很大时,系统提供的方法效率很低,根本不能满足我们的需求,因此就需要一个高效的读写工具,这就是protocol buffer的优势,相应的网站是:
https://code.google.com/p/protobuf/downloads/list
总结一下优缺点:
优点:
(1)性能好/效率高
有人做过测试,xml比protobuf慢3-4倍
测试:100000个对象
有人做过测试,xml比protobuf慢3-4倍
测试:100000个对象
(2)代码生成机制
我们拿深度学习训练系统来说(假设用C++实现),假设神经网络的卷积层包含如下参数:
我们拿深度学习训练系统来说(假设用C++实现),假设神经网络的卷积层包含如下参数:
--------------------------------
网络名称:name
网络类型:type
卷积层参数:convolution_param
--------------------------------
如果使用protobuf实现,首先要写一个proto文件(不妨叫VGG.prototxt):
--------------------------------
layers{
name: "conv2"
type: CONVOLUTION
convolution_param {
num_output: 192
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "eltwise1"
top: "conv2"
}
--------------------------------
接着利用protobuf内置的编译器编译这个文件,重点可以看这个文件solver.hpp。
有了protocol 我们就不用自己写协议去解析这些文件了,是不是很方便
还有一个好处是:如果通讯双方使用不同的语言,使用protocol 可以有效确保两边的模块对于协议的处理是一致的。
网络名称:name
网络类型:type
卷积层参数:convolution_param
--------------------------------
如果使用protobuf实现,首先要写一个proto文件(不妨叫VGG.prototxt):
--------------------------------
layers{
name: "conv2"
type: CONVOLUTION
convolution_param {
num_output: 192
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "eltwise1"
top: "conv2"
}
--------------------------------
接着利用protobuf内置的编译器编译这个文件,重点可以看这个文件solver.hpp。
有了protocol 我们就不用自己写协议去解析这些文件了,是不是很方便
还有一个好处是:如果通讯双方使用不同的语言,使用protocol 可以有效确保两边的模块对于协议的处理是一致的。
缺点:
XML 的通用性比Protobuf 好一些,毕竟Protobuf 没有开源前只是 Google 内部使用的工具
最大的问题是保存的数据以二进制形式读取,调试的时候没办法查看内容。。。
0 0
- 关于google protocol buffer(PB)的优缺点和一些个人的理解
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- Google Protocol Buffer 的使用和原理
- sqlserver数据库还原语句
- lua-base64-MD5
- Java实现几种常见排序方法
- Meanshift,聚类算法
- 在 KitKat以上版本中使用Translucent将Navigation Bar透明化
- 关于google protocol buffer(PB)的优缺点和一些个人的理解
- 如何开启一个事务
- JAVA RMI实现远程接口调用
- TortoiseSVN的使用入门
- 字符串的全排列 递归
- Syntax error on token "Invalid Regular Expression Options", no accurate corr
- 使用symbolicatecrash分析iOS Crash文件
- 正则表达式判断字符串是否为MAC地址
- 自定义Dialog