简要介绍下tensorflow的计算图
1.请简要介绍下tensorflow的计算图,深度学习 DL框架 中
@寒小阳&AntZ:Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个节点都是计算图上的一个Tensor, 也就是张量,而节点之间的边描述了计算之间的依赖关系(定义时)和数学操作(运算时)。Tensorflow计算的过程就是利用的Tensor来建立一个计算图,然后使用Session会话来启动计算,最后得到结果的过程。
无论是编译类型的语言还是脚本语言,都是一步一步的,变量计算后,就会得到结果,比如c=a+b,当执行完语句后,就会得到c的值。但tensorflow不是,它首先要通过编程,构建一个计算图出来,然后启用一个会话来把数据作为输入,通过这个图规定的计算步骤计算,最后得到结果。
计算图的创建
import tensorflow as tf
if __name__ == "__main__":
a = tf.constant([1.0,2.0],name = "a")
b = tf.constant([2.0,3.0],name = "b")
result = a + b
print(a.graph)
print(a.graph is tf.get_default_graph())
g1 = tf.Graph()
with g1.as_default():
c = tf.get_variable("c",initializer = tf.zeros_initializer,shape=(1))
g2 = tf.Graph()
with g2.as_default():
c = tf.get_variable("c",initializer = tf.ones_initializer,shape=(1))
with tf.Session(graph=g1) as sess:
tf.initialize_all_variables().run()
with tf.variable_scope("",reuse = True):
print(sess.run(tf.get_variable("c")))
with tf.Session(graph=g2) as sess:
tf.initialize_all_variables().run()
with tf.variable_scope("",reuse = True):
print(sess.run(tf.get_variable("c")))
结果:
<tensorflow.python.framework.ops.Graph object at 0x7f972806de50>
True
WARNING:tensorflow:From /home/lee/anaconda2/lib/python2.7/site-packages/tensorflow/python/util/tf_should_use.py:175: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
[ 0.]
WARNING:tensorflow:From /home/lee/anaconda2/lib/python2.7/site-packages/tensorflow/python/util/tf_should_use.py:175: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
[ 1.]
分别在计算图g1和g2中都定义张量c,在g1中初始化为0,在g2中初始化为1,从上面的代码可以看出,当我们运行不同的计算图的时候张量c的值是不一样的。所以,在TensorFlow中可以通过计算图来隔离张量的运算
张量:
import tensorflow as tf
import numpy as np
if __name__ == "__main__":
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")
result = tf.add(a,b,name="add")
print(result)
# Tensor("add:0", shape=(2,), dtype=float32)
np_a = np.array([1.0,2.0])
np_b = np.array([2.0,3.0])
np_result = np_a + np_b
print(np_result)
# [ 3. 5.]
在TensorFlow中,可以将张量理解为数组。如果是0阶张量,那么将代表这个张量是一个标量,也就是一个数字,如果是一阶张量可以理解为向量或者是一维数组,n阶张量可以理解为n维的数组。但,TensorFlow张量的实现并没有直接采用数组的形式,张量它只是对运算结果的引用,从下面的例子中可以发现,TensorFlow的张量和numpy的数组是不一样的,TensorFlow的计算结果不是一个数组而是一个张量的结构形式,在这个张量中,它包含了三个重要的属性,名字、维度、类型。
张量的名字,是张量的唯一标识符,通过名字可以发现张量是如何计算出来的。计算图中的每一个节点都代表了一个计算,而计算的结果就保存在张量之中,张量和计算图上的节点所代表的计算结果是对应的。“add:0”代表的是计算节点"add"的第一个输出结果(编号都是从0开始)。
张量的维度,说明了张量的维度信息,如shape=(2,)代表张量是一个二维数组。
张量的类型,说明了张量的数据类型,每一个张量都会有一个对应的数据类型。在TensorFlow的计算中,先会对参与运算的所有张量进行类型检测,如果发现张量的类型不匹配的时候就会报错。
会话:
会话:用来执行定义好的运算,而且会话拥有和管理程序运行时的所有资源。当计算完成之后,需要通过关闭会话来帮助系统回收资源,否则可能导致资源泄露的问题。在TensorFlow中使用会话有两种方式。第一种需要明确调用会话生成函数和关闭会话函数
a = tf.constant([1.,2.],name="a")
b = tf.constant([2.0,3.0],name="b")
result = tf.add(a,b,name="add")
# 创建session
sess = tf.Session()
#获取运算结果
sess.run(result)
#关闭会话,释放资源
sess.close()
在使用这种模式的时候,需要明确的调用sess.close()来关闭会话释放资源。如果,当程序因为异常而退出的时候,sess.close()有可能不会执行从而导致资源泄露问题的发生。为了解决这种情况,TensorFlow提供了通过python的上下文管理器来使用会话,也就是第二种方式
#通过python的上下文管理器来创建Session,管理会话
#通过上下文管理来管理会话,不需要调用sess.close()来关闭会话
#当上下文退出的时候会话会自动关闭和释放资源
with tf.Session() as sess:
sess.run(result)
参考来自:
1. http://m.blog.csdn.net/v_JULY_v/article/details/78121924
2.http://blog.csdn.net/sinat_29957455/article/details/78307179
简要介绍下tensorflow的计算图相关推荐
- 1、请简要介绍下SVM。
SVM,全称是support vector machine,中文名叫支持向量机.SVM是一个面向数据的分类算法,它的目标是为确定一个分类超平面,从而将不同的数据分隔开. 扩展:支持向量机学习方法包括构 ...
- Hadoop学习笔记一 简要介绍
Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop. 本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...
- 简要介绍一下贝叶斯定理( Bayes‘ theorem)
简要介绍一下贝叶斯定理( Bayes' theorem) 在引出贝叶斯定理之前,先学习几个定义: 条件概率(又称后验概率)就是事件A在另外一个事件B已经发生条件下的发生概率.条件概率表示为P(A|B) ...
- 导向滤波python_导向滤波(Guided Filter)简要介绍
1.介绍 提到导向滤波,首先想到的是"何恺明",他的确是真大神,在图像领域,是中国人的骄傲,深度学习流行的时候,也是提出各种新算法,比如ResNets,而最近两年,深度学习的发展已 ...
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划
在Android系统中,提供了独特的匿名共享内存子系统Ashmem(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中.它有两个特点,一是能够辅助内存管理系统来有效地 ...
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的 ...
- Android应用程序组件Content Provider简要介绍和学习计划
在Android系统中,Content Provider作为应用程序四大组件之一,它起到在应用程序之间共享数据的作用,同时,它还是标准的数据访问接口.前面的一系列文章已经分析过Android应用程序的 ...
- 简单介绍下我使用了一年多还不知道的Sql server 2005 组件知识
简介 Microsoft SQL Server 2005 是用于大规模联机事务处理 (OLTP).数据仓库和电子商务应用的数据库平台:也是用于数据集成.分析和报表解决方案的商业智能平台. SQL Se ...
- 老郭的《Dalvik虚拟机垃圾收集机制简要介绍和学习计划》
伴随着"Dalvik is dead,long live Dalvik"这行AOSP代码提交日志,在Android5.0中,ART运行时取代了Dalvik虚拟机.虽然Dalvik虚 ...
最新文章
- CentOS 7 yum安装Zabbix
- linux/Docker
- 玩转服务器(华为云)—购买配置登录篇
- Python杂谈: __init__.py的作用
- Leanote使用mysql_《搭建个人Leanote云笔记本》阿里云体验实验室 教程
- 人工智能——数据、信息与知识
- Atitit 前端测试最简化内嵌web服务器 php 与node.js 目录 1.1. php内置Web Server	1 1.2. Node的	2 Node的比较麻烦些。。Php更加简单
- 《计算机网络 自顶向下方法》(第7版)答案(第九章)
- 机器学习笔记(12)— K均值算法
- 修改登录密码html代码,html登录界面设置账号密码
- 大学英语四级词汇记忆法
- 手机性能测评之【开机】
- platform驱动的probe过程
- 网络下载器 Internet Download Manager v2021最新绿色便携版
- ovirt guest agent 安装
- 机器学习书单(实践篇)
- 远程计算机怎么安装系统,装机高手教你怎样win7远程桌面连接设置
- iPhoneX 安全区域 safe-area-inset-*样式不生效
- ❤️动态爱心代码合集❤️
- 如何免费快速制作USB启动盘,how to create USB bootable from ISO file
热门文章
- 常见的字符编码(ASCII码,unicode,utf-8,gbk)
- python青蛙跳台阶_Python算法题(一)——青蛙跳台阶
- 导致项目进度延误的三种常见场景及解决方案
- 无线连接打印服务器,如何用旧电脑架设无线网络打印服务器
- 【plang 1.4.4】编写贪吃蛇脚本
- 网格化管理服务系统,携同用户创新共进步
- torch.utils.data.WeightedRandomSampler样本不均衡情况下带权重随机采样
- torch.utils.data.WeightedRandomSampler采样
- Halcon卡尺测量
- 计算机网络 一种自上而下的方法,计算机网络-自上而下-和-自下而上-两种教学方法比较分析.pdf...