找回密码
 立即注册
查看: 162|回复: 0

tensorflow之Protocol Buffer

[复制链接]
发表于 2023-2-24 19:51 | 显示全部楼层 |阅读模式
本文摘抄自郑泽宇的《TensorFlow实战Google深度学习框架》,这本书干货还是很足的
如果想了解Protocol Buffer的具体用法,请参考如下链接
Protocol Buffer

       Protocol Buffer是谷歌开发的处理结构化数据的工具。何为处理结构化数据?这里我们给出一个例子。假设要记录一些用户信息,每个用户的信息包括用户的名字、ID和E-mail地址。那么一个用户的信息可以表示为以下的形式。
name: 张三
id: 12345
email: zhangsan@abc.com
       上面的用户信息就是一个结构化的数据。注意本文介绍的结构化数据和大数据中的结构化数据的概念不同,本文中介绍的结构化数据指的是拥有多种属性的数据。比如上述的用户信息中包含名字、ID和E-mail地址三种不同属性,那么它就是一个结构化数据。要将这些结构化的用户信息持久化或者进行网络传输时,就需要先将它们序列化。所谓序列化,是将结构化的数据变成数据流的格式,简单地说就是变为一个字符串。将结构化的数据序列化,并从序列化之后的数据流中还原出原来的结构化数据,统称为处理结构化数据,这就是Protocol Buffer解决的主要问题。
       除Protocol Buffer之外,XML和JSON是两种比较常用的结构化数据处理工具。比如将上面的用户信息使用XML格式表达,那么数据的格式为:
<user>
           <name>张三</name>
           <id>12345</id>
           <email>zhangsan@abc.com</email>
</user>
同样的数据,使用JSON的格式为:
{
    "name": "张三",
    "id": "12345",
    "email": "zhangsan@abc.com",
}
        Protocol Buffer格式的数据和XML或者JSON格式的数据有比较大的区别。首先,Protocol Buffer序列化之后得到的数据不是可读的字符串,而是二进制流。其次,XMLJSON格式的数据信息都包含在了序列化之后的数据中,不需要任何其他信息就能还原序列化之后的数据。但使用Protoco Buffer时需要先定义数据的格式(schema)。还原一个序列化之后的数据将需要使用到这个定义好的数据格式。以下代码给出了上述用户信息样例的数据格式定义文件。因为这样的差别,Protocol Buffer序列化出来的数据要比XML格式的数据小3到10倍,解析时间要快20到100倍。
message user{
optional string name = 1;
required int32 id = 2;
repeated string email = 3;
}
Protocol Buffer定义数据格式的文件一般保存在.ptoto文件中。每一个message代表了一类结构化的数据,比如这里的用户信息。message里面定义了每一个属性的类型和名字。Protocol Buffer里属性的类型可以是像布尔型、整数型、实数型、字符型这样的基本类型,也可以是另外一个message。这样大大增加了Protocol Buffer的灵活性。在message中,Protocol Buffer也定义了一个属性是必需的(required)还是可选的(optional),或者是可重复的(repeated)。如果一个属性是必需的(required),那么这个message的所有实例都需要有这个属性;如果一个属性是可选的(optional),那么这个属性的取值可以为空;如果一个属性是可重复的(repeated),那么这个属性的取值可以是一个列表。还是以用户信息为例,所有用户都需要有ID,所以ID这个属性是必需的;不是所有用户都填写了姓名,所以姓名这个属性是可选的;一个用户可能有多个E-mail地址,所以E-mail地址是可重复的。
       Protocol Buffer是TensorFlow系统中使用到的重要工具,TensorFlow中的数据基本都是通过Protocol Buffer来组织的。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 05:33 , Processed in 0.088477 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表