• TensorFlow入门(三、TensorFlow模型的运行机制)


    TensorFlow通过"图"和会话的方式分离了计算的定义和执行,即它的运行机制是"定义"与"运行"相分离的。从操作层面可以把它抽象成两种:模型构建和模型运行。

    TensorFlow模型中的几个概念:

    ①张量(tensor):数据,即某一类型的多维数组

    ②变量(Variable):常用于定义模型中的参数,是通过不断训练得到的值

    ③占位符(placeholder):输入变量的载体,也可以理解成定义函数时的参数

    ④"图"中的节点操作(operation,OP):即一个OP获得0个或多个tensor,执行计算,输出额外的0个或多个tensor

    关于"图"的概念:

    ①一个"图"代表一个计算任务

    ②在模型运行的环节中,"图"将在会话(session)里被启动

    ③session将"图"的OP分发到如CPU或GPU之类的设备上,同时提供执行OP的方法。这些方法执行后,将产生的tensor返回。在Python语言中,返回的tensor是numpy ndarray对象,在C和C++语言中,返回的tensor是TensorFlow::Tensor实例

    session与"图"的工作关系如下图所示:

    "图"的运行情况有3种应用场景:

    ①训练场景:

    即实现模型从无到有的过程,通过对样本的学习训练,调整学习参数,形成最终的模型。其过程是将给定的样本和标签作为输入节点,通过大量的循环迭代,将图中的正向运算(从输入的样本通过OP运算得到输出的方向)得到的输出值,再进行反向运算(从输出到输入的方向),以更新模型中的学习参数,最终使模型产生的正向结果最大化地接近样本标签。这样就得到了一个可以拟合样本规律的模型

    ②测试场景:

    即利用"图"的正向运算得到的结果与真实值进行比较的过程

    ③使用场景:

    即利用"图"的正向运算得到结果,并直接使用。该场景下,模型与函数相比,输入的样本就是实参,占位符就是形参,运算过程相当于函数体,得到的结果相当于返回值

    session的建立使用

            session的建立共分为4种方法:

            ①创建对象实例

    1. import tensorflow as tf
    2. #定义一个常量
    3. hello = tf.constant('Hello,Tensorflow!')
    4. #建立一个session
    5. sess = tf.Session()
    6. #通过session里的run函数来运行结果
    7. print(sess.run(hello))
    8. #关闭session
    9. sess.close()

            ②使用with语法

    1. import tensorflow as tf
    2. #定义两个常量
    3. a = tf.constant(3)
    4. b = tf.constant(4)
    5. #建立session
    6. with tf.Session() as sess:
    7. print("相加: %i"%sess.run(a + b))
    8. print("相乘: %i"%sess.run(a * b))
    9. #with session的用法是最常见的,沿用了Python中with的语法,即当程序结束后会自动关闭session,而不需要再去写close

            ③使用交互式session方式

    1. import tensorflow as tf
    2. #定义两个常量
    3. a = tf.constant(3)
    4. b = tf.constant(4)
    5. #建立一个有交互式功能的session
    6. #运行结果
    7. print(a.eval())
    8. print(b.eval())
    9. #关闭session
    10. sess.close()
    11. #一般在Jupyter环境下使用较多,具体用法与with session类似。不需要用session的run函数这种形式运行。而是定义好会话对象后,每次执行时,调用tensor.eval()即可

            ④使用Supervisor方式,该方式更高级一些,可以自动来管理session中的具体任务,例如,载入/载出检查点文件、写入TensorBoard等,另外该方法还支持分布式训练的部署。

  • 相关阅读:
    【PHP特性-变量覆盖】函数的使用不当、配置不当、代码逻辑漏洞
    【栈】NowCoder-由两个栈组成的队列
    C语言测试题:用冒泡法对输入的10个字符由小到大排序 ,要求数组做为函数参数。
    【无标题】
    Electron是什么以及可以做什么
    常用linux的命令(持续更新)
    Qt中常见的文件操作
    基于AVR128单片机智能电风扇控制系统
    ElasticSearch深度分页详解
    突破使用debugger反调试的网页
  • 原文地址:https://blog.csdn.net/Victor_Li_/article/details/133312721