TensorFlow 基础概念
初识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 基础概念的更多相关文章
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- Jmeter基础之---jmeter基础概念
Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
- JavaBean 基础概念、使用实例及代码分析
JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...
- RabbitMQ基础概念详细介绍
http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...
- linux设备驱动归纳总结(二):模块的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...
- linux设备驱动归纳总结(一)内核的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...
随机推荐
- 常见SQL注入点判断
sql注入手工检测 SQL注入手工检测 1基本检测 数字型 字符型 搜索型 POST注入 布尔盲注 报错注入 堆叠注入 判断是什么数据库 2绕过技巧 大小写 替换关键字 使用编码 注释和符号 等价函数 ...
- web移动端css reset
通用版css reset,pc端使用只需要修改html{font-size: 10px;}为html{font-size: 12px;} @charset "utf-8"; htm ...
- element ui中循环出来的表格勾选问题
需求是这样的,一个房主屋里面有多个电表,每一个表是一个账户,一次只能给一个账户缴费,在点击go按钮进行缴费,这个时候判断是否跨表勾选,跨表格勾选则弹窗提示,反之符合需求,走缴费逻辑 上代码 <! ...
- 获取浏览器URL中查询字符串中的参数
//http://www.runoob.com/index.html?name=xiaoming&age=23function showWindowHref(){ var sHref = wi ...
- 【java】JSON.toJSONString 空对象也可以转化为JSON字符串
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...
- 学习笔记——JS语言精粹
JS作用域是基于词法作用域的顶级对象. JS是一门弱类型语言,强类型能在编译时检测错误. JS是唯一一门所有浏览器都能识别的语言. 块注释对于被注释的代码是不安全的,例如/* var rm=/a*/ ...
- hydra-microservice 中文手册(3W字预警)
Hydras 是什么? Hydra 是一个 NodeJS 包(技术栈不是重点,思想!思想!思想!),它有助于构建分布式应用程序,比如微服务. Hydra 提供服务发现(service discover ...
- 使用MDNS进行局域网服务发现(.NET Core)
使用MDNS进行局域网服务发现(.NET Core) 想要服务写的好,配置文件不可少.如果是一个复杂的系统,甚至配置文件都是需要进行动态调整的,做起来好像就不是那么方便了,通常情况下,asp.net ...
- [水题日常]UVA1639 糖果(Candy,ACM/ICPC Chengdu 2012)
今天来尝试了几道数学期望相关的题,这是我认为比较有趣的一道题 这次不废话啦直接开始~ 一句话题意:两个分别装有n个糖果的盒子,每次随机选一个盒子然后拿走一颗糖(选的概率分别是\(p\)和\((1-p) ...
- 处理fMRI数据的一些常用Matlab命令
背景 处理fMRI数据常常用到MATLAB,在此记录一些常用代码及功能. 1.读取原始DICOM数据 1-1 读入dicom图像并绘图: Image = dicomread('fMRI.dcm'); ...