tensorflow中有向图(计算图、Graph)、上下文环境(Session)和执行流程
计算图(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
tensorflow中有向图(计算图、Graph)、上下文环境(Session)和执行流程的更多相关文章
- TensorFlow计算模型—计算图
TensorFlow是一个通过计算图的形式来表述计算的编程系统.其中的Tnesor,代表它的数据结构,而Flow代表它的计算模型.TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的 ...
- Tensorflow中的图(tf.Graph)和会话(tf.Session)详解
Tensorflow中的图(tf.Graph)和会话(tf.Session) Tensorflow编程系统 Tensorflow工具或者说深度学习本身就是一个连贯紧密的系统.一般的系统是一个自治独立的 ...
- tensorflow中创建多个计算图(Graph)
tf程序中,系统会自动创建并维护一个默认的计算图,计算图可以理解为神经网络(Neural Network)结构的程序化描述.如果不显式指定所归属的计算图,则所有的tensor和Operation都是在 ...
- TensorFlow中的Session、Graph、operation、tensor
TensorFlow中的Session.Graph.operation.tensor
- 【Tensorflow】(tf.Graph)和(tf.session)
图(tf.Graph):计算图,主要用于构建网络,本身不进行任何实际的计算. 会话(tf.session):会话,主要用于执行网络.所有关于神经网络的计算都在这里进行,它执行的依据是计算图或者计算图的 ...
- Dev环境中的集成测试用例执行时上下文环境检查(实战)
Dev环境中的集成测试用例执行时上下文环境检查(实战) Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术 ...
- js中当call或者apply传入的第一个参数是null/undefined时,js函数内执行的上下文环境是什么?
在js中我们都知道call/apply,还有比较少用的bind;传入的第一个参数都是改变函数当前上下文对象; call/apply区别在于传的参数不同,一个是已逗号分隔字符串,一个以数组形式.而bin ...
- tf中计算图 执行流程学习【转载】
转自:https://blog.csdn.net/dcrmg/article/details/79028003 https://blog.csdn.net/qian99/article/details ...
- TensorFlow框架之Computational Graph详解
1. Getting Start 1.1 import TensorFlow应用程序需要引入编程架包,才能访问TensorFlow的类.方法和符号.如下所示的方法: import tensorflow ...
随机推荐
- 自制Javascript浮动广告
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb ...
- Django~1
一 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有 ...
- mybatis使用注意的细节
1.mybatis对sql执行后会对结果进行封装,如果没有返回任何记录,只是封装后的对象没有值,而对象并不为空null: (这个问题疏忽坑了两次,在对返回数组结果进行判断的时候,我用的if(Array ...
- 大数据架构之:Kafka
Kafka 是一个高吞吐.分布式.基于发布订阅的消息系统,利用Kafka技术可在廉价PC Server上搭建起大规模消息系统.Kafka具有消息持久化.高吞吐.分布式.多客户端支持.实时等特性,适用于 ...
- Django-实现图片验证码
Django实现图片验证码 Python生成随机验证码,需要使用PIL模块. pip3 install pillow 1.基本使用 1. 1 创建图片 from PIL import Image im ...
- php数组函数-array_reduce()
array_reduce()函数发送数组中的值到用户自定义函数,并返回一个字符串. 注:如果数组是空的或则初始化值未传递,该函数返回NULL array_reduce(array,myfunction ...
- NSFetchedResultController与UITableView
1 #import "AppDelegate.h" #import "Book.h" @interface AppDelegate () @end @imple ...
- MongoDB快速入门(七)- Save() 方法
MongoDB Save() 方法 save() 方法取代,通过新文档到 save()方法 语法 mongodb 的 save()方法如下所示的基本语法: >db.COLLECTION_NAME ...
- 微信内置浏览器和小程序的 User Agent 区别及判断方法
通过UA来判断不同的设备或者浏览器是开发者最常用的方式方法,而对于微信开发和小程序也是同样的一个情况,我们可以通过微信内置浏览器 User Agent 信息来判断其具体类型或者设备. 所以子凡就通过徒 ...
- Hessian与Spring整合
1.服务端与Spring的整合 1.1:web.xml中配置控制器 <servlet> <servlet-name>hessian</servlet-name> & ...