初识TensorFlow,看了几天教程后有些无聊,决定写些东西,来夯实一下基础,提供些前进动力。

一、Session.run()和Tensor.eval()的区别:
  最主要的区别就是可以使用sess.run()一步获取多个Tensor值,而tensor.eval()只能获取当前tensor值。
比如:
  labels = [1,2,3]
  x = tf.expand_dims(labels, 0)
  y = tf.expand_dims(labels, 1)
  z = tf.expand_dims(labels, -1)
  print(sess.run([x,y,z]))
  注:对于tensor t,在使用t.eval()时,等价于:tf.get_default_session().run(t)。
  此外,还有一个用法,operation.run(),等价于:tf.get_default_session().run(op)。operation是什么呢,就是计算图中的一个计算节点,定义一个计算的公式。

  比如:
  train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
  train_step.run(feed_dict={x:batch_xs,y_:batch_ys,keep_prob:0.5})
注:调用operation.run()和Tensor.eval()时,其参数是session,但该参数可选,默认是None,标示进程中默认的Session。那么如何设置默认session呢?两种方式:
  1、with tf.Session():
  2、 sess = tf.Session()
    with sess.as_default():
    print(sess.run([x,y,z]))
    sess.close()

  此外,还可以设置默认图
  graph = tf.Graph()

  with graph.as_default():

二、graph和session的必要性

  Python的计算效率比较低,而深度学习需要大量的迭代计算。所以,通常会使用函数库,如Numpy,把类似矩阵乘法这样的复杂运算使用其他外部语言(比如C++)来实现。但计算完成后从外部切换回Python仍然开销很大。所以,先把所有的计算操作公式定义好(这个用图描述,只是初级都用默认图),然后全部一次性在Python外运行计算(这个在定义的会话session中完成)。这是graph和session的由来及用处。

  session有三种定义方式:
  1、该方式需要调用sess.close()来关掉sess。
  sess=tf.Session()
  init=tf.global_variables_initializer()
  sess.run(init)

  sess.close()

  2、该方式创建context,当上下文退出时自动释放,不需要手动关掉session。
  with tf.Session() as sess:
  init=tf.global_variables_initializer()
  sess.run(init)
  3、该方式可以在sess中定义operation。
  sess = tf.InteractiveSession()

  session可以有多个,graph也可以有多个,具体如下:
  Session类的构造函数:tf.Session.__init__(target='',graph=None,config=None)
  如果创建Session时没有指定Graph,则Session会加载默认的Graph。如果在一个进程中创建了多个Graph(这是会的,可能有多层,多个结构,或分布式处理),则需要创建不同的Session来加载每个Graph,而每个Graph也可以加载在多个Session中进行计算。一个session中只能有一个图,而一个图可以放在多个session中。

  g1 = tf.Graph()
  with g1.as_default():
  c1 = tf.constant([1.0,1.0])
  with tf.Graph().as_default() as g2:
  c2 = tf.constant([2.0,2.0])

  with tf.Session(graph=g1) as sess1:
  print sess1.run(c1)
  with tf.Session(graph=g2) as sess2:
  print sess2.run(c2)

  Graph中的operation定义好之后,看sess.run()要运行哪个,运行哪个就触发哪个。

TensorFlow 基础概念的更多相关文章

  1. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  2. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  3. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  4. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  5. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  6. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  7. RabbitMQ基础概念详细介绍

    http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...

  8. linux设备驱动归纳总结(二):模块的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...

  9. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

随机推荐

  1. 【Vue】 axios同步执行多个请求

    问题 项目中遇到一个需求,在填写商品的时候,选择商品分类后,加载出商品分类的扩展属性. 这个扩展属性有可能是自定义的数据字典里的单选/多远. 要用第一个axios查询扩展属性,第二个axios 从第一 ...

  2. Redis数据库简介

    最近的项目需要用到Redis数据库和MySQL,恶补学习. Redis的使用手册可以看: https://redis.io/ https://www.runoob.com/redis/redis-tu ...

  3. pycharm 2018.2.4过期-激活处理方式(Axure8.0版本到期)

    参考文章:https://blog.csdn.net/HALEN001/article/details/81137092 第一种方法亲测可以 大致步骤: 1.2018.8.15更新最新破解补丁Jetb ...

  4. flask-mail 机制

    上课无聊,总结下学习的flask-mail 机制 flask-mail 了解 flask-mail 机制中可以用pip 安装也可以用pycharm里面直接安装. flask-mail是一个能调用smt ...

  5. P6100 [USACO19FEB]Painting the Barn G

    本题解提供的做法思路应该是比较清晰的,可惜代码实现比较繁琐,仅供大家参考. 题解 不难发现 \(x\) ,\(y\) 的取值范围只有 \(200\) ,所以我们可以考虑从这里入手.我们可以先通过二维前 ...

  6. sort by背后使用了什么排序算法

    用到了快速排序,但不仅仅只用了快速排序,还结合了插入排序和堆排序 搬运自https://blog.csdn.net/qq_35440678/article/details/80147601

  7. JavaSE05-数组

    1.概念 同一种类型数据的集合.其实数组就是一个容器. 2.优点 可以自动给数组中的元素从0开始编号,方便操作这些元素. 3.格式 1 元素类型[] 数组名 = new 元素类型[元素个数或数组长度] ...

  8. do while 后面要加分号,你大爷的

    do { //do something } while (0) TSfree(url); 这个TSFree 正好是个宏,然后编译就提示错误: error: expected ';' before '_ ...

  9. openstack高可用集群16-ceph介绍和部署

    Ceph Ceph是一个可靠.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备和文件系统服务.块设备存储是Ceph的强项. Ceph的主要优点是分布式 ...

  10. MVC中Bundle的使用

    BundleConfig配置 (1)StyleBundle中的参数,即为cshtml中需要调用的虚拟路径名称. (2)Include包含路径,可以包含一个或多个css或js文件.即包含一组文件. pu ...