TensorFlow源码分析(8):Proto Buffer简介

Proto Buffer是Google的数据传输协议,用于C++、Python和Java对象序列化。在TensorFlow中,如DeviceAttributes类,使用Proto Buffer进行序列化和反序列化。消息类型通过.proto文件定义,然后使用工具生成对应编程语言的类。Proto Buffer中的变量需赋予唯一序号以确定序列化顺序,如DeviceAttributes的name、device_type等。成员变量如DeviceLocality的link,可使用repeated关键字表示可变长数组。
摘要由CSDN通过智能技术生成

TensorFlow除了大量使用Eigen和CUDA等计算库函数之外,还大量使用了Proto Buffer。Proto Buffer是一个数据传输协议,它可以将C++,Python和Java创建的对象序列化为二进制文件。这样,我们可以很轻松地实现在不同的设备上运行的用不同编程语言实现的不同进程之间,实现数据传送。

但是,并非所有的对象,都可以用Proto Buffer传输。要使用Proto Buffer这些对象的类型必须满足特定的要求。确切地说,数据类型必须实现序列化和反序列函数。我们把实现了序列化和反序列化函数的类称作是Proto Buffer类。编写这两个函数通常是繁琐无聊的操作。所幸的是,Google提供了一个工具,自动生成Proto Buffer类。具体来说,我们先用Proto Buffer语言定义消息类型,然后再利用Proto Buffer工具,生成特定编程语言的类。

TensorFlow的DeviceAttributes类就是Proto Buffer类型。顾名思义,它是定义设备属性的类。它的Proto Buffer消息类型定义在tensorflow/core/framework/device_attributes.proto中。

message DeviceAttributes {
  // Fully specified name of the device within a cluster.
  string name = 1;

  // String representation of device_type.
  string device_type = 2;

  // Memory capacity of device in bytes.
  int64 memory_limit = 4;

  // Platform-specific data about device t
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值