zoukankan      html  css  js  c++  java
  • 【TensorFlow使用教程】1 环境搭建

      一、TensorFlow主要依赖包——Protocol Buffer & Bazel

      1. Protocol Buffer

      首先要弄清三个概念:

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

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

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

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

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

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

      由于Protocol Buffer在序列化时可根据需要选定数据类型,它序列化出来的数据一般比XML格式小,解析时间也要快许多。

      Protocol Buffer定义数据格式的文件一般保存在.proto文件中,如

    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。

  • 相关阅读:
    C语言运算符优先级
    【科创网0184】选小寿星
    结构体的基本使用
    10月18日的疑问
    【从简单开始】简单的A+B问题
    【从简单开始】五层小山
    【从简单开始】Hello World
    基本递归(3)求阶乘
    基本递归(2)汉诺塔
    基本递归(1)勒让德多项式
  • 原文地址:https://www.cnblogs.com/cry-star/p/10673112.html
Copyright © 2011-2022 走看看