博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tensorflow中有向图(计算图、Graph)、上下文环境(Session)和执行流程
阅读量:5085 次
发布时间:2019-06-13

本文共 2003 字,大约阅读时间需要 6 分钟。

计算图(Graph)

Tensorflow是基于图(Graph)的计算框架,图的节点由事先定义的运算(操作、Operation)构成,图的各个节点之间由张量(tensor)来链接,Tensorflow的计算过程就是张量(tensor)在节点之间从前到后的流动传输过程,如下图示例:

有向图中,节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。
节点可以被分配到多个计算设备上,可以异步和并行地执行操作。因为是有向图,所以只有等到之前的入度节点们的计算状态完成后,其后的节点才能执行操作。推广到神经网络中,同一层之间的不同节点上的运算可以异步或并行的执行,但是前后层之间的执行还是要顺序执行,因为后一层的输入依赖于前一层的输出。

上下文环境(Session)

tf的计算必须要在一个Session的上下文中,Session提供了Operation执行和Tensor求值的环境。一个Session可能会拥有一些资源,例如Variable或者Queue。当我们不再需要该session的时候,需要调用sess.close()关闭会话(或使用Python上下文管理器自动关闭),将这些资源释放。

如果在创建Session时没有指定Graph,则该Session会加载默认Graph。如果在一个进程中创建了多个Graph,则需要创建不同的Session来加载每个Graph,而每个Graph则可以加载在多个Session中进行计算,Session与Session之间是相互独立的。

执行流程

Tensorflow的执行可以分为三个步骤:
  •     创建Tensor
  •     定义Operations(Operations输入Tensor,然后输出另一个Tensor)
  •     执行计算(也就是运行一个可计算的图)
一个最简单的Tensorflow计算流程示例如下,实现两个一维向量求和运算:

# -*- coding: utf-8 -*-)import tensorflow as tf# 1. 创建两个张量(Tensor)input1 = tf.constant([1.0, 1.0, 1.0, 1.0])input2 = tf.constant([2.0, 2.0, 2.0, 2.0])# 2. 定义操作(Operations)output = tf.add(input1, input2)# 3.  执行计算with tf.Session() as sess:    result = sess.run(output)    #result = output.eval()    print result    #sess.close()   # 使用"with"语句,由python自动管理Session,不再需要显式调用close()
tf中是定义操作(Operations)与执行操作分开的工作模式。上例中定义了一个名称为output的求和操作(也就是图(Graph)上的一个节点),定义操作(Operation)的时候计算不会立即执行,直到在上下文的Session环境中调用run()或eval(),触发了Tensorflow执行计算图,从而获取output计算结点的结果。
更一般的情况下,tf中输入数据可能是不确定或随时变化的,针对这种情况,tf提供了feed注入机制,可以临时替代图(Graph)中操作(Operations)的输入张量(tensor),即把这些数据定义为占位变量,直到执行计算图之前才具体给定数据,再把这些数据以feed_dict的形式作为参数提供给sess.run()调用。feed机制按这种思路,上例改为:

# -*- coding: utf-8 -*-)import tensorflow as tf# 1. 创建两个占位变量,只定义数值类型和形状(shape),具体数值在计算图执行前给定input1 = tf.placeholder(tf.float16,shape=[4])input2 = tf.placeholder(tf.float16,shape=[4])# 2. 定义操作(Operations)output = tf.add(input1, input2)# 3.  执行计算with tf.Session() as sess:    input_1 = [1.0, 1.0, 1.0, 1.0]    input_2 = [2.0, 2.0, 2.0, 2.0]    result = sess.run(output,feed_dict = {input1:input_1, input2:input_2})    print result

转载于:https://www.cnblogs.com/mtcnn/p/9411769.html

你可能感兴趣的文章
对象与类
查看>>
《奸的好人2》财色战场----笔记
查看>>
BZOJ 1834网络扩容题解
查看>>
bzoj1878
查看>>
【Vegas原创】Mysql绿色版安装方法
查看>>
Thrift Expected protocol id ffffff82 but got 0
查看>>
分享《去哪儿网》前端笔试题
查看>>
2013-07-04学习笔记二
查看>>
CP15 协处理器寄存器解读
查看>>
【codeforces 787B】Not Afraid
查看>>
【9111】高精度除法(高精度除高精度)
查看>>
【hihocoder 1312】搜索三·启发式搜索(普通广搜做法)
查看>>
JavaFX中ObservableValue类型
查看>>
杭电 1097 A hard puzzle
查看>>
[转载]INFORMIX锁机制及如何剖析其锁申辩(第二部门)
查看>>
Andriod-项目stymqjlb-学习笔记2-原型
查看>>
Web AppDomain
查看>>
JQuery创建规范插件
查看>>
AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
查看>>
Unity中Text渐变色,和Text间距
查看>>