TensorFlow基础概念

作者: 前端极客技术 | 来源:发表于2019-06-11 23:46 被阅读117次

    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。
    TensorFlow 是Google第二代大规模分布式深度学习框架。

    • 灵活通用的深度学习库
    • 端云结合的人工智能引擎
    • 高性能的基础平台软件
    • 跨平台的机器学习系统

    应用场景:
    行人检测、人脸检测、行为识别、身份证自动输入与人脸图像比较、OCR+自动化审核

    TensorFlow 数据流图介绍

    TensorFlow数据流图是一种声明式编程范式
    声明式编程与命令式编程的多角度对比


    tensorflow-base-liutu-1.png

    数据流图由有向边和节点组成


    tensorflow-base-liutu-2.png

    数据流图的优势:

    • 并行计算快
    • 分布式计算快(CPUs,GPUs,TPUs)
    • 预编译优化(XLA)
    • 可移植性好(Language-independent representation)

    张量(Tensor)

    在数学里,张量是一种几何实体,广义上表示任意形式的“数据”。张量可以理解为0阶(rank)标量、1阶向量和2阶矩阵在高维度空间上的推广,张量的阶描述它表示数据的最大维度。

    在TensorFlow中,张量表示某种相同的数据类型的多维数组
    因此,张量有两个重要的属性:
    1、数据类型,如浮点型、整型、字符串
    2、数组形状: 各个维度的大小

    TensorFlow张量是什么可以总结为一下几点:

    • 张量是用来表示多维数据的
    • 张量是执行操作时的输入或输出数据
    • 用户通过执行操作来创建或计算张量
    • 张量的形状不一定在编译时确定,可以在运行时通过形状推断计算得到

    几类比较特别的张量,由以下操作产生:

    tf.constant     // 常量
    tf.placeholder   // 占位符
    tf.Variable      // 变量
    

    变量(Variable)

    变量Variable是一种特殊的张量,主要作用是维护特定节点的状态,如深度学习或机器学习的模型参数。
    tf.Variable方法是操作,返回值是变量(特殊张量)
    通过tf.Variable方法创建的变量,与张量一样,可以作为操作的输入和输出。

    不同之处:

    • 张量的生命周期通常随依赖的计算完成而结束,内存也随即释放
    • 变量则常驻内存,在每一步训练时不断更新值,以实现模型参数的更新。

    TensorFlow变量使用流程

    tensorflow-base-variable-1.png

    操作(Operation)

    TensorFlow用数据流图表示算法模型。数据流图由节点和有向边组成,每个节点均对应一个具体的操作。因此,操作是模型功能的实际载体

    数据流图中的节点按照功能不同可以分为3种:

    • 存储节点:有状态的变量操作,通常用来存储模型参数
    • 计算节点:无状态的计算或控制操作,主要负责算法逻辑表达或流程控制。
    • 数据节点:数据的占位符操作,用于描述图外输入数据的属性。

    操作的输入和输出是张量或操作(函数式编程)

    TensorFlow典型计算和控制操作

    tensorflow-base-operation-1.png

    TensorFlow占位符操作

    tensorflow 使用占位符操作表示图外输入的数据,如训练数据和测试数据。
    TensorFlow数据流图描述了算法模型的计算拓扑,其中的各个操作(节点)都是抽象的函数映射或数学表达式。
    换句话说,数据流图本身是一个具有计算拓扑和内部结构的“壳”。在用户向数据流图填充数据前,图中并没有真正执行任何计算。

    会话(Session)

    会话提供了估算张量和执行操作的运行环境,它是发放计算任务的客户端,所有计算任务都由它连接的执行引擎完成。一个会话的典型使用流程分为以下3步:

    # 1、创建会话
    # target:会话连接的执行引擎  graph:会话加载的数据流图  config:会话启动时的配置项
    sess = tf.Session(target=..., graph=..., config=...)
    # 2、估算张量或执行操作
    sess.run(...)
    # 3、关闭会话
    sess.close()
    

    会话执行

    获取张量值的另外两种方法:估算张量(Tensor.eval)与执行操作(Operation.run)

    import tensorflow as tf
    # 创建数据流图:y=w * x + b, 其中w和b为存储节点,x为数据节点
    x = tf.placeholder(tf.float32)
    w = tf.Variable(1.0)
    b = tf.Variable(1.0)
    y = w * x + b
    with tf.Session() as sess:
        tf.global_variables_initializer().run() # Operation.run
        fetch = y.eval(feed_dict={x: 3.0}) # Tensor.eval
        print(fetch)   # fetch = 1.0 * 3.0 + 1.0
    

    会话执行原理

    当我们调用sess.run(train_op)语句执行训练操作时:

    • 首先,程序内部提取操作依赖的所有前置操作。这些操作的节点共同组成一幅子图。
    • 然后,程序会将子图中的计算节点、存储节点和数据节点按照各自的执行设备分类,相同设备上的节点组成了一幅局部图
    • 最后,每个设备上的局部图在实际执行时,根据节点间的依赖关系将各个节点有序地加载到设备上执行。

    优化器(Optimizer)

    优化器是实现优化算法的载体。

    一次典型的迭代优化应该分为以下3个步骤:
    1、计算梯度:调用compute_gradients方法;
    2、处理梯度:用户按照自己需求处理梯度值,如梯度裁剪和梯度加权等。
    3、应用梯度:调用apply_gradients方法,将处理后的梯度值应用到模型参数。

    TensorFlow内置优化器:


    tensorflow-base-optimizer.png

    欢迎关注作者的个人博客和微信公众号
    个人博客: 代码视界
    微信公众号:代码视界

    代码视界

    相关文章

      网友评论

        本文标题:TensorFlow基础概念

        本文链接:https://www.haomeiwen.com/subject/hzjhfctx.html