【TensorFlow使用教程】1 环境搭建

  1、TensorFlow主要依赖包——Protocol Buffer & Bazel网络

  1. Protocol Buffer函数

  首先要弄清三个概念:工具

  • 结构化数据:指拥有多种属性的数据,例如用户信息能够表示为
    name:张三
    id:1234
    email:zhangsan@abc.com

 

  这样的用户信息就是一个结构化数据,name、id和email都是这个数据的属性。测试

  • 序列化:结构化的数据持久化或进行网络传输时,须要先进行序列化。序列化就是将结构化的数据变成数据流的格式,即变成字符串。
  • 结构化数据的处理:将结构化数据序列化,并从序列化以后的数据流中还原出原来的结构化数据。

  Protocol Buffer就是用来处理结构化数据的。ui

  另外两种常常被用来处理结构化数据的工具时XML和JSON,它们和Protocol Buffer的主要区别以下spa

  XML、JSON Protocol Buffer
序列化结果 可读字符串 二进制流
还原操做 序列化结果包含格式信息,无需其余信息便可还原 需事先定义数据格式,还原时也需使用这个定义好的格式。

  因为Protocol Buffer在序列化时可根据须要选定数据类型,它序列化出来的数据通常比XML格式小,解析时间也要快许多。code

  Protocol Buffer定义数据格式的文件通常保存在.proto文件中,如blog

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

  其中,每个message表明了一类结构化的数据,它的里面定义了每个属性的类型和名字。资源

  属性的类型能够是:字符串

  • 布尔型
  • 整型
  • 实数型
  • 字符型等基本类型
  • 另外一个message

  属性的设置:

  • repeated 属性是能够重复的,即属性的取值能够是一个列表
  • optional 属性是可选的,即属性的取值能够为空

  2. Bazel

  一个自动化构建工具,用于对项目空间(workspace)中的程序进行编译。

  workspace能够理解为一个文件夹,它包含了编译一个软件所须要的源代码以及输出编译结果的软链接(symbolic link),其根目录的基本结构以下:

  • WORKSPACE文件,定义了对外部资源的依赖关系。能够是空文件。
  • BUILD文件,Bazel经过它来寻找须要编译的目标。它采用一种相似Python的语法来指定每个编译目标的输入、输出和编译方式,也就是说,和通常的开放式编译工具不一样,Bazel的编译方式是事先定义好的。
  • 程序源码的py文件(以Python为例)。

  Bazel对Python支持的编译方式只有如下三种:

  • py_binary 将Python程序编译为可执行文件
  • py_library 将Python程序编译为库函数供其余py_binary或py_test调用
  • py_test 编译Python测试程序

  举例见书p28-29。