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. 1、请简要介绍下SVM。

    SVM,全称是support vector machine,中文名叫支持向量机.SVM是一个面向数据的分类算法,它的目标是为确定一个分类超平面,从而将不同的数据分隔开. 扩展:支持向量机学习方法包括构 ...

  2. Hadoop学习笔记一 简要介绍

    Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop.     本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...

  3. 简要介绍一下贝叶斯定理( Bayes‘ theorem)

    简要介绍一下贝叶斯定理( Bayes' theorem) 在引出贝叶斯定理之前,先学习几个定义: 条件概率(又称后验概率)就是事件A在另外一个事件B已经发生条件下的发生概率.条件概率表示为P(A|B) ...

  4. 导向滤波python_导向滤波(Guided Filter)简要介绍

    1.介绍 提到导向滤波,首先想到的是"何恺明",他的确是真大神,在图像领域,是中国人的骄傲,深度学习流行的时候,也是提出各种新算法,比如ResNets,而最近两年,深度学习的发展已 ...

  5. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划

    在Android系统中,提供了独特的匿名共享内存子系统Ashmem(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中.它有两个特点,一是能够辅助内存管理系统来有效地 ...

  6. Android进程间通信(IPC)机制Binder简要介绍和学习计划

    在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的 ...

  7. Android应用程序组件Content Provider简要介绍和学习计划

    在Android系统中,Content Provider作为应用程序四大组件之一,它起到在应用程序之间共享数据的作用,同时,它还是标准的数据访问接口.前面的一系列文章已经分析过Android应用程序的 ...

  8. 简单介绍下我使用了一年多还不知道的Sql server 2005 组件知识

    简介 Microsoft SQL Server 2005 是用于大规模联机事务处理 (OLTP).数据仓库和电子商务应用的数据库平台:也是用于数据集成.分析和报表解决方案的商业智能平台. SQL Se ...

  9. 老郭的《Dalvik虚拟机垃圾收集机制简要介绍和学习计划》

    伴随着"Dalvik is dead,long live Dalvik"这行AOSP代码提交日志,在Android5.0中,ART运行时取代了Dalvik虚拟机.虽然Dalvik虚 ...

最新文章

  1. CentOS 7 yum安装Zabbix
  2. linux/Docker
  3. 玩转服务器(华为云)—购买配置登录篇
  4. Python杂谈: __init__.py的作用
  5. Leanote使用mysql_《搭建个人Leanote云笔记本》阿里云体验实验室 教程
  6. 人工智能——数据、信息与知识
  7. Atitit 前端测试最简化内嵌web服务器 php 与node.js 目录 1.1. php内置Web Server 1 1.2. Node的 2 Node的比较麻烦些。。Php更加简单
  8. 《计算机网络 自顶向下方法》(第7版)答案(第九章)
  9. 机器学习笔记(12)— K均值算法
  10. 修改登录密码html代码,html登录界面设置账号密码
  11. 大学英语四级词汇记忆法
  12. 手机性能测评之【开机】
  13. platform驱动的probe过程
  14. 网络下载器 Internet Download Manager v2021最新绿色便携版
  15. ovirt guest agent 安装
  16. 机器学习书单(实践篇)
  17. 远程计算机怎么安装系统,装机高手教你怎样win7远程桌面连接设置
  18. iPhoneX 安全区域 safe-area-inset-*样式不生效
  19. ❤️动态爱心代码合集❤️
  20. 如何免费快速制作USB启动盘,how to create USB bootable from ISO file

热门文章

  1. 常见的字符编码(ASCII码,unicode,utf-8,gbk)
  2. python青蛙跳台阶_Python算法题(一)——青蛙跳台阶
  3. 导致项目进度延误的三种常见场景及解决方案
  4. 无线连接打印服务器,如何用旧电脑架设无线网络打印服务器
  5. 【plang 1.4.4】编写贪吃蛇脚本
  6. 网格化管理服务系统,携同用户创新共进步
  7. torch.utils.data.WeightedRandomSampler样本不均衡情况下带权重随机采样
  8. torch.utils.data.WeightedRandomSampler采样
  9. Halcon卡尺测量
  10. 计算机网络 一种自上而下的方法,计算机网络-自上而下-和-自下而上-两种教学方法比较分析.pdf...