tensorflow学习(1):Protocol Buffer

博主在学习TensorFlow的起步阶段,一开始想用纸质的方式记录,但是鉴于纸质笔记搜索起来太慢,所以采用记录在博客的方式上。一来方便自己日后查找,二来也可以供大家浏览。如有错误之处,望各位海涵。

这里介绍TensorFlow的一个最主要的工具包:Protocol Buffer

Protocol Buffer是谷歌开发的用于处理结构化数据的工具。结构化数据指的是拥有多种属性的数据,例如下面例子的用户信息包含名字,ID和E-mail三种不同属性。要将这些结构化的用户信息持久化或进行网络传输时,就要先将他们序列化。所谓序列化就是讲结构化的数据变成数据流的形式,简单的说就是变成一个字符串。

name:张三
id:13245
email:[email protected]

ps:将结构化的数据序列化,并从序列化之后的数据流中还原出原来的结构化数据,统称为处理结构化数据,这也是Protocol Buffer解决的主要问题。
Protocol Buffer序列化之后得到的数据是二进制流,不是可读字符串。
那么按照正常思路,接下来一定会规定彼此转换的规则。
猜对了一半,接下来是规定结构化数据的规则,毕竟转二进制太麻烦了,我们也不需要懂底层的东西,但是我们写出来的东西得让计算机识别啊,有点像C/C++中的结构体。
对于上面的例子,我们有如下定义:

message user{
optional string name = 1;
required int32 id = 2;
repeated string email = 3;
}

Protocol Buffer 定义数据格式的文件一般保存在.proto文件中。每一个message代表了一类结构化数据,比如这里的用户信息。数据的类型有布尔型,整数型,实数型,字符型等基本类型,也可以是嵌套message。对每个属性前面要加限定,required(必须的)or optional(可选的)or repeated(可重复的)。如果是required,那么message的所有实例必须有这个属性,如果是optional,则属性可以是空的,如果是repeated,则属性的取值可以是一个列表(如一个用户可以有多个email)

ps:最新的Protocol Buffer3已经不支持required了

猜你喜欢

转载自blog.csdn.net/shanlepu6038/article/details/84472347