1.认识TensorFlow

1.1简介

2015年11月GitHub开源
Google Brain
数据流图
数值计算
机器学习和深度神经网络
其他计算领域

1.2优点

  • 灵活性:C++,支持底层数值计算;支持多种语言 python、Java、C++、Go

    后端CUDA

  • 可移植性:可在多种平台展开计算,服务器、PC、手机、CPU、GPU、TPU。

  • 分布式:可指定操作符对应计算设备,进行分布式并行计算。

(在CPU上运行时,TensorFlow封装了低层次的张量运算库:Eigen;在GPU上运行时,TensorFlow封装了高度优化的深度学习运算库:cuDNN,即NVIDIA CUDA。)

1.3概念

计算图

image.png

  • 静态计算图:TensorFlow1.0时代,创建计算图,开启session并显式执行计算图。

    静态计算图构建完成之后几乎全部在TensorFlow内核上使用C++代码执行,效率更高;对计算步骤 进行一定的优化,剪去和结果无关的计算步骤。

  • 动态计算图:TensorFlow2.0时代,无需开启session,每使用一个算子后,该算子会被动态加入到隐含的默认计算图中立即执行(Eager Excution)得到结果。

    使用动态计算图即Eager Excution的好处是方便调试程序,它会让TensorFlow代码的表现和Python 原生代码的表现一样;但运行效率相对会低一些,会有许多次Python进程和TensorFlow的C++进程
    之间的通信。

  • Autograph:TensorFlow2.0时代,使用@tf.function装饰器将Python函数转换成TensorFlow静态计算图构建代码。实践中,我们一般会先用动态计算图调试代码,然后在需要提高性能的地方利用@tf.function切换成Autograph获得更高的效率。

    张量(tensor)

    标量为0维张量,向量为1维张量,矩阵为2维张量。
    彩色图像有RGB三个通道,可以表示为3维张量。
    视频有时间维,可以表示为4维张量。
    张量的数据类型和numpy array基本一一对应。
    image.png

    节点(node)/算子

    image.png

    会话(session)

    image.png

    1.4 TensorFlow结构

    image.png

    2. TensorFlow建模流程

    3.模型文件

    3.1文件.pb

    谷歌推荐的保存模型的方式是保存模型为 PB 文件,表示 MetaGraph 的 protocol buffer格式的文件,MetaGraph 包括计算图,数据流,以及相关的变量和输入输出signature以及 asserts 指创建计算图时额外的文件。
    它的主要使用场景是实现创建模型与使用模型的解耦, 使得前向推导 inference的代码统一。

    When you are saving your graph, a MetaGraph is created. This is the graph itself, and all the other metadata necessary for computations in this graph, as well as some user info that can be saved and version specification.

PB文件的优点为:

  • 它具有语言独立性,可独立运行,封闭的序列化格式,任何语言都可以解析它。
  • 它允许其他语言和深度学习框架读取、继续训练和迁移 TensorFlow 的模型。
  • 模型的变量都会变成固定的,导致模型的大小会大大减小,适合在手机端运行。