初识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. Dr.COM获取用户属性超时!请检查防火墙配置允许UDP 61440端口。怎么解决

    最近校园网老是出问题,看到好多同学都遇到了下面的问题,我就来说一下我的解决方法.(目前我认识的有三个同学遇到了这样的情况,用这个方法都解决了,但不一定对每个人都有效) 首先登陆net.scut.edu ...

  2. Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

    Newbe.Claptrap 0.4.4 发布,模型验证器上线. 更新内容 完全基于表达式树的模型验证器 本版本,我们带来了基于表达式树实现的模型验证器.并实现了很多内置的验证方法. 我们罗列了与 F ...

  3. go学习49天

    写文件操作 func OpenFile(name string,flag int,perm FileMode) (file *File,err error)

  4. CSP-S2020 DP专项训练

    前言 \(\text{CPS-S2020}\) 已然临近,而 \(\text{DP}\) 作为联赛中的常考内容,是必不可少的复习要点,现根据教练和个人刷题,整理部分好题如下(其实基本上是直接搬--). ...

  5. 记一起由 Clang 编译器优化触发的 Crash

    摘要:一个有意思的 Crash 探究过程,Clang 有 GCC 没有 本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/troubl ...

  6. kafka-java消费者与生产者代码示例

    引入依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.11 ...

  7. Linux 上安装 mysql

    1.通过 yum 命令安装 mysql 可以先通过 yum list |grep mysql 方式查看有哪些版本的 mysql 2.安装 mysql yum install mysql-server ...

  8. tornado 作业 自定义模板 UIMethod以UIModule

    自定义uimodule s3.py import tornado.ioloop import tornado.web import UIMethod as mt class MainHandler(t ...

  9. Scrapy+Scrapyd+Scrapydweb实现爬虫可视化

    Scrapy+Scrapyd+Scrapydweb实现爬虫可视化 Scrapyd是一个服务,用来运行scrapy爬虫的 它允许你部署你的scrapy项目以及通过HTTP JSON的方式控制你的爬虫 官 ...

  10. [日常摸鱼]UVA393 The Doors 简单计算几何+最短路

    The  Boy Next   Doors 题意:给定一个固定大小的房间($x,y$的范围都是$[0,10]$),有$n$个墙壁作为障碍(都与横坐标轴垂直),每个墙壁都有两扇门分别用四个点来描述,起点 ...