文档章节

TensorFlow学习系列(一):初识TensorFlow

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:21
字数 867
阅读 1
收藏 0
点赞 0
评论 0

这篇教程是翻译Morgan写的TensorFlow教程,作者已经授权翻译,这是原文


目录


TensorFlow学习系列(一):初识TensorFlow

TensorFlow学习系列(二):形状和动态维度

TensorFlow学习系列(三):保存/恢复和混合多个模型

TensorFlow学习系列(四):利用神经网络实现泛逼近器(universal approximator)

TensorFlow学习系列(五):如何使用队列和多线程优化输入管道


TensorFlow(TF)不像一个典型的程序,你可能习惯于写数学运算,比如 a = 2 + 2 ,然后得到 a 的结果是 4 。但是 TF 模糊了数学运算和他们实际运算结果之间的界限。在 TF 中,你得到的是一个张量(Tensor)。是不是一脸懵逼?我们举个例子,比如一个简单的加法操作,请看如下代码:

import tensorflow as tf

# Usual way to do math operation in a program

a = 2 + 2

print(a) # => 2

# TensorFlow's way

a = tf.add(2, 2)

print(a) # => Tensor("Add_1:0", shape=(), dtype=int32)

当你在 TF 中进行数学公式编写时,你必须把它当做是一种运算操作,而不是去计算某一个具体的值。在 TF 中发生的所有事,都是在会话(Session) 中进行的。所以,当你在 TF 中编写一个加法时,其实你只是设计了一个加法操作,而不是实际添加任何东西。所有的这些设计都是会在图(Graph)中产生,你会在图中保留这些计算操作和张量,而不是具体的值。


当你开始一个会话(Session),你实际上在你的程序中创建了一个新的作用域(scope),而操作就在这个作用域中发生,比如上面的加法操作。也就是说,这是你能运行和评估操作和张量的地方。当你开始执行这个操作的时候,那么你设计的操作才真正开始在现实世界中发生:张量获取真实的数值,操作进行计算,得到结果,函数收敛等等。

但是,一旦你超出你会话的范围,图就会返回一个静态的并且是相当无聊的状态。我们回归到理论,总而言之,有两个主要阶段在TF的代码中:

  • 图阶段:你能在图中设计各种数学操作。但是在这个阶段,你只能保存你自己的操作和元数据,但没有任何的有形的形式。

  • 会话和评估阶段:变量被初始化,各种函数被配置,操作被执行,中间张量和梯度被执行,等等一系列操作被执行。

一些小提示:最重要的部分是,在多个评估之间,只有变量保存它们的数据。所有其他张量都是临时的,这意味着,如果你没有添加一个合适的 feed_dict ,那么你无法访问你的训练。因为,这个 feed_dict 是一个添加变量值的张量。比如,如下代码所示:

import tensorflow as tf

p = tf.placeholder(tf.float32, shape=[], name="p")

v2 = tf.Variable(2. , name="v2")

a = tf.add(p, v2)

with tf.Session() as sess:

sess.run(tf.initialize_all_variables())

# From the moment we initiliaze variables, until the end of the Session

# We can access them

print(sess.run(v2)) # -> 2.

# On the other hand, intermediate variables has to be recalculated 

# each time you want to access its value

print(sess.run(a, feed_dict={p: 3})) # -> 5.

# Even if calculated the value of a, it's no more accessible

# the value of a has been freed off the memory

print(sess.run(a)) # Error ...


References:

官网

本文转载自:http://www.jianshu.com/p/86f2a252581a

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2139
码字总数 82983
作品 0
程序员
史上最全TensorFlow学习资源汇总

来源 悦动智能(公众号ID:aibbtcom) 本篇文章将为大家总结TensorFlow纯干货学习资源,非常适合新手学习,建议大家收藏。 ▌一 、TensorFlow教程资源 1)适合初学者的TensorFlow教程和代码示...

悦动智能 ⋅ 04/12 ⋅ 0

【干货】史上最全的Tensorflow学习资源汇总,速藏!

一 、Tensorflow教程资源: 1)适合初学者的Tensorflow教程和代码示例:(https://github.com/aymericdamien/TensorFlow-Examples)该教程不光提供了一些经典的数据集,更是从实现最简单的“Hel...

技术小能手 ⋅ 04/16 ⋅ 0

2018 AI、机器学习、深度学习与 Tensorflow 相关优秀书籍、课程、示例链接集锦

DataScienceAI Book Links | 机器学习、深度学习与自然语言处理领域推荐的书籍列表 人工智能、深度学习与 Tensorflow 相关书籍、课程、示例列表是笔者 Awesome Links 系列的一部分;对于其他...

王下邀月熊 ⋅ 05/21 ⋅ 0

Tensorflow快餐教程(1) - 30行代码搞定手写识别

去年买了几本讲tensorflow的书,结果今年看的时候发现有些样例代码所用的API已经过时了。看来自己维护一个保持更新的Tensorflow的教程还是有意义的。这是写这一系列的初心。 快餐教程系列希望...

lusing ⋅ 04/16 ⋅ 0

开发者福利:TensorFlow 中文社区论坛测试版正式上线

雷锋网(公众号:雷锋网) AI 研习社消息,4 月 13 日,谷歌与 Caicloud (才云) 联合发起和创建的 TensorFlow 中文社区论坛测试版(https://www.tensorflowers.cn)正式上线。 从谷歌发布 Tens...

思颖 ⋅ 04/13 ⋅ 0

tensorflow(一) 介绍及基本操作

一、tensorflow介绍 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T...

missayaaa ⋅ 04/23 ⋅ 0

Tensorflow快餐教程(12) - 用机器写莎士比亚的戏剧

高层框架:TFLearn和Keras 上一节我们学习了Tensorflow的高层API封装,可以通过简单的几步就生成一个DNN分类器来解决MNIST手写识别问题。 尽管Tensorflow也在不断推进Estimator API。但是,这...

lusing ⋅ 05/29 ⋅ 0

TensorFlow平台的搭建

一、TensorFlow介绍 TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数...

qq_39525832 ⋅ 05/28 ⋅ 0

机器学习Tensorflow笔记4:iOS通过Core ML使用Tensorflow训练模型

Tensorflow是Google推出的人工智能框架,而Core ML是苹果推出的人工智能框架,两者是有很大的区别,其中Tensorflow是包含了训练模型和评估模型,Core ML只支持在设备上评估模型,不能训练模型...

ImWiki ⋅ 05/16 ⋅ 0

开发者注意啦,谷歌宣布开源 Swift for TensorFlow

雷锋网(公众号:雷锋网) AI 研习社按,今年三月,谷歌在 TensorFlow 开发者峰会上公开演示了 Swift for TensorFlow,近日,TensorFlow 官网宣布 Swift for TensorFlow 已在 GitHub 上开源,地...

思颖 ⋅ 04/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Greys Java在线问题诊断工具

Greys是一个JVM进程执行过程中的异常诊断工具。 在不中断程序执行的情况下轻松完成JVM相关问题排查工作 目标群体 有时候突然一个问题反馈上来,需要入参才能完成定位,但恰恰没有任何日志。回...

素雷 ⋅ 23分钟前 ⋅ 0

git从远程仓库拉取代码的常用指令

一种(比较麻烦的)拉代码的方法 git clone //克隆代码库,与远程代码库的主干建立连接,如果主干已经在就不用再clone啦,克隆路径为当前路径下的新创建的文件夹 git checkout -b //本地建立...

Helios51 ⋅ 38分钟前 ⋅ 0

005. 深入JVM学习—Java堆内存参数调整

1. JVM整体内存调整图解(调优关键) 实际上每一块子内存区域都会存在一部分可变伸缩区域,其基本流程:如果内存空间不足,则在可变的范围之内扩大内存空间,当一段时间之后,内存空间不紧张...

影狼 ⋅ 43分钟前 ⋅ 0

内存障碍: 软件黑客的硬件视图

此文为笔者近日有幸看到的一则关于计算机底层内存障碍的学术论文,并翻译(机译)而来[自认为翻译的还行],若读者想要英文原版的论文话,给我留言,我发给你。 内存障碍: 软件黑客的硬件视图...

Romane ⋅ 今天 ⋅ 0

SpringCloud 微服务 (七) 服务通信 Feign

壹 继续第(六)篇RestTemplate篇 做到现在,本机上已经有注册中心: eureka, 服务:client、order、product 继续在order中实现通信向product服务,使用Feign方式 下面记录学习和遇到的问题 贰 or...

___大侠 ⋅ 今天 ⋅ 0

gitee、github上issue标签方案

目录 [TOC] issue生命周期 st=>start: 开始e=>end: 结束op0=>operation: 新建issueop1=>operation: 评审issueop2=>operation: 任务负责人执行任务cond1=>condition: 是否通过?op3=>o......

lovewinner ⋅ 今天 ⋅ 0

浅谈mysql的索引设计原则以及常见索引的区别

索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. 数据库索引的设计原则: 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索...

屌丝男神 ⋅ 今天 ⋅ 0

String,StringBuilder,StringBuffer三者的区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。 首先说运行速度,或者说是, 1.执行速度 在这方面运行速度快慢为:StringBuilder(线程不安全,可变) > StringBuffer...

时刻在奔跑 ⋅ 今天 ⋅ 0

java以太坊开发 - web3j使用钱包进行转账

首先载入钱包,然后利用账户凭证操作受控交易Transfer进行转账: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/Credentials credentials = Wallet......

以太坊教程 ⋅ 今天 ⋅ 0

Oracle全文检索配置与实践

Oracle全文检索配置与实践

微小宝 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部