计算图 graph
tensorflow,tensor就是数据,flow就是流,tensorflow就是数据流
tensorflow 是一个用计算图的形式来表示计算的编程系统,所有的数据和计算都会被转化成计算图上的一个节点,节点之间的边就是数据流(数据流动的轨迹)。
计算图的使用
1. 建立节点
2. 执行计算
计算图有两种形式
默认的计算图
tf 维护一个默认的计算图,
get_default_graph:获取默认计算图
graph:获取节点所属计算图
import tensorflow as tf a = tf.constant([1., 2.], name = 'a')
b = tf.constant([2., 3.], name = 'b')
result = a + b print(a.graph is tf.get_default_graph()) # True
数据本身就是节点,该节点的 graph 就是默认计算图
自定义计算图
tf.Graph 可以生成新的计算图,不同计算图之间的数据和计算不能共享
## g1
g1 = tf.Graph()
with g1.as_default():
# 在计算图 g1 中定义变量 “v” ,并设置初始值为 0。
v = tf.get_variable("v", [1], initializer = tf.zeros_initializer()) # 设置初始值为0,shape 为 1 ## g2
g2 = tf.Graph()
with g2.as_default():
# 在计算图 g2 中定义变量 “v” ,并设置初始值为 1。
v = tf.get_variable("v", [1], initializer = tf.ones_initializer()) # 设置初始值为1 # 在计算图 g1 中读取变量“v” 的取值
with tf.Session(graph = g1) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope("", reuse=True):
print(sess.run(tf.get_variable("v"))) # [0.] # 在计算图 g2 中读取变量“v” 的取值
with tf.Session(graph = g2) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope("", reuse=True):
print(sess.run(tf.get_variable("v"))) # [1.] ## g3
g3 = tf.Graph()
with g3.as_default():
# 在计算图 g2 中定义变量 “v” ,并设置初始值为 1。
v = tf.get_variable("v2", [1], initializer = tf.ones_initializer()) # 设置初始值为1 # 在计算图 g1 中读取变量“v” 的取值
with tf.Session(graph = g3) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope("", reuse=True):
print(sess.run(tf.get_variable("v2"))) # [1.]
print(sess.run(tf.get_variable("v"))) # 报错 Variable v does not exist
可以看到 g3 无法调用 g2 中的变量v
计算图可以用来隔离张量和计算
计算图的操作
保存
g1 = tf.Graph()
with g1.as_default():
# 需要加上名称,在读取pb文件的时候,是通过name和下标来取得对应的tensor的
c1 = tf.constant(4.0, name='c1') with tf.Session(graph=g1) as sess1:
print(sess1.run(c1)) # 4.0 # g1的图定义,包含pb的path, pb文件名,是否是文本默认False
tf.train.write_graph(g1.as_graph_def(),'.','graph.pb',False)
读取
import tensorflow as tf#load graph
with tf.gfile.FastGFile("./graph.pb",'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
tf.import_graph_def(graph_def, name='') sess = tf.Session()
c1_tensor = sess.graph.get_tensor_by_name("c1:0")
c1 = sess.run(c1_tensor)
print(c1) # 4.0
穿插调用
g1 = tf.Graph()
with g1.as_default():
# 声明的变量有名称是一个好的习惯,方便以后使用
c1 = tf.constant(4.0, name="c1") g2 = tf.Graph()
with g2.as_default():
c2 = tf.constant(20.0, name="c2") with tf.Session(graph=g2) as sess1:
# 通过名称和下标来得到相应的值
c1_list = tf.import_graph_def(g1.as_graph_def(), return_elements = ["c1:0"], name = '')
print(sess1.run(c1_list[0]+c2)) # 24.0
指定计算图的运行设备
g = tf.Graph()
# 指定计算运行的设备
with g.device('/gpu:0'):
result = a + b
计算图资源管理
在一个计算图中,可以通过集合来管理不同的资源。
比如通过 tf.add_to_collection 将资源加入一个或多个集合中,然后通过 tf.get_collection 获取一个集合里的所有资源
参考资料:
https://www.cnblogs.com/q735613050/p/7632792.html
计算图 graph的更多相关文章
- tensorflow中创建多个计算图(Graph)
tf程序中,系统会自动创建并维护一个默认的计算图,计算图可以理解为神经网络(Neural Network)结构的程序化描述.如果不显式指定所归属的计算图,则所有的tensor和Operation都是在 ...
- Tensorflow计算模型 —— 计算图
转载自:http://blog.csdn.net/john_xyz/article/details/69053626 Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图 ...
- 【深度学习系列】PaddlePaddle可视化之VisualDL
上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化.在讲VisualDL之前,我们先 ...
- 深度学习中batch normalization
目录 1 Batch Normalization笔记 1.1 引包 1.2 构建模型: 1.3 构建训练函数 1.4 结论 Batch Normalization笔记 我们将会用MNIST数 ...
- tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构
Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件: 张量(Tensor) 基于张量的各种操作 计算图(Computation Graph) 自动微分(A ...
- Tensorflow会话Session
转载自: http://blog.csdn.net/Hanging_Gardens/article/details/72784392 https://www.cnblogs.com/hypnus-ly ...
- tensorflow (七) k-means
tensorflow基础暂不介绍 Python 相关库的安装 在进入正式聚类实验之前,我们还需要配置计算及画图需要用到相关支持包. 安装 seaborn: pip install seaborn 安装 ...
- tensorflow(1) 基础: 神经网络基本框架
1.tensorflow 的计算得到的是计算图graph import tensorflow as tf a=tf.constant([1.0,2.0]) b=tf.constant([3.0,4.0 ...
- TensorFlow迭代速度变慢的问题
最近用TensorFlow实现遗传算法(Genetic Algorithms),发现迭代速度越来越慢,用time.time()观察以后,发现每次迭代都要比上一次慢0.5秒左右,但是每次迭代的计算量是差 ...
随机推荐
- LeetCode--003--无重复字符的最长子串(java)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- 2018-02-16 GetSameTypeQuestion
'目前存在的BUG '图片补丁存在多个URL Private Declare Function URLDownloadToFile Lib "urlmon" Alias " ...
- Confluence 6 空间的权限是附加的
空间的权限是附加的.如果一个用户以个人的方式或者以一个用户组成员的方式赋予了权限,Confluence 将会把这些权限合并在一起. 下面是这个概念的示例... Sasha 是 confluence- ...
- Myeclipse项目中Source、Projects、Libraries、Order and export含义
Myeclipse 新建一个项目时,会出现如下界面 输入项目名,点击next Source source folder:存放.java源文件的根目录:output folder:.class编译输出的 ...
- 4、Ubuntu系统环境变量详解
参考:Linux公社Ubuntu系统环境变量详解 UNIX/Linux系统中的环境变量和库文件的使用方法 由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,因此我们需要了解 ...
- xgboost原理及应用--转
1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboos ...
- redis 基本指令
redis-cli开启redis客户端 1. set key value // 设置key-value 2. get key // 获取key 3. delete key [] // 删除key 4. ...
- linux导出sql数据
1. 导出数据库的数据 在linux命令行下输入 mysqldump -u userName -p dabaseName > fileName.sql 在linux命令行下输入 2. 导出表 ...
- python – time.sleep – 睡眠线程
import time from threading import Thread class worker(Thread): def run(self): for x in xrange(0,11): ...
- 前端VUE框架-es6
EMCAScript 6 又叫 es2015 1.常量和变量 常量: const a = "hello" 常量不能修改和重复定义 变量: let:定义一个块级作用域的变量 需要先定 ...