独家 | 10分钟带你上手TensorFlow实践(附代码)

这篇TensorFlow教程的目标读者是那些对机器学习有一定基本概念并且想尝试上手TensorFlow的人。首先你需要安装好TensorFlow(可以跟着本教程进行安装http://cv-tricks.com/artificial-intelligence/deep-learning/deep-learning-frameworks/tensorflow/install-tensorflow-1-0-gpu-ubuntu-14-04-aws-p2-xlarge/)。 本教程共分为两部分: 第一部分我们会配合代码实例解释基础概念, 第二部分我们会构建一个线性回归模型。

第一部分: TensorFlow基础

TensorFlow是一个用于数值计算的库,其中数据沿着图(graph)而流动。在TensorFlow中数据用n维数组表示并被称之为Tensors。而图(graph)由数据(也叫Tensors)和数学运算共同组成。

  • 图中的节点: 代表数学运算
  • 图中的边(edges): 代表在不同运算中流动的Tensors

TensorFlow不同于其他编程语言的另一个方面是: 在TensorFlow中无论你要构建什么,首先你需要构思整个蓝图。在创建图的时候,变量并没有被赋值。随后当已经创建了完整的图之后,还需要在一个会话(session)中去运行它,此时图中的变量才会被赋值。稍后还有更详细的介绍。

现在让我们通过动手来学习。运行Python并导入tensorflow:

1. TensorFlow中的图

图是TensorFlow的主干,所有的计算/操作/变量都位于图中。代码中发生的一切都位于TensorFlow提供的一个默认图中。可以通过如下代码访问该图:

你也可以这样得到所有操作的list:

由于现在图是空的,所以该语句的输出也是空的,即[]。

如果想打印出各操作的名称,用这条语句:

这回还是空的,等我们在图中加入了操作之后再来执行该语句。

另外,我们也可创建多个图,现在先不细讲。

2. TensorFlow会话

图是用来定义操作的,而操作必须运行在一个会话(session)中,图和会话的创建是相互独立的。可以把图想象成是设计蓝图,则会话就是它的施工地点。

图仅仅是定义了计算或者说构建了设计蓝图。 然而,除非我们在会话中运行图或者图的一部分,否则没有任何变量也没有任何值。 

可以这样创建会话:

打开一个会话时,要记得在结尾处关闭。或者可以用python中的with语句块,如此一来,它将会自动被关闭: 

在本教程的代码中我们会频繁使用with语句块,我们也推荐你这样操作。

3. TensorFlow中的Tensors

TF将数据保存在Tensors中,它有点像numPy包中的多维数组(尽管它们和numPy数组不同)


常量


常量的值不能修改,定义方式如下:

可以看到,不同于Python之类的其他语言,这里并不能直接打印/访问常量的值,除非在会话中运行,再来试一下:

这回打印了输出结果1.0


变量


即Tensors,和其它语言中的变量相似。

变量(顾名思义)和常量不同,能够存储不同的值。然而,在TF中,变量需要分别进行初始化,单独初始化每个变量效率很低。但TensorFlow提供了一次性初始化所有变量的机制,具体方法如下:

对于0.11及更早的tf版本,使用initialize_all_variables()方法:

>>>init_op = tf.initialize_all_variables()

0.12及以后的版本,使用global_variables_initializer():

>>>init_op = tf.global_variables_initializer()

上述代码会把init_op添加到TensorFlow的默认图中。

现在,试图访问刚才定义的变量b之前,先运行一下init_op,打印b输出2.0:

现在可以打印出该图中的全部操作:

这回输出了:

Const
test_var/initial_value
test_var
test_var/Assign
test_var/read
init

如你所见,之前定义过常量a, 所以它被加到了图中。同理,对于变量b而言,许多’test_var’的状态,例如test_var/initial_value,test_var/read等也被加入了图中。你可以利用TensorBoard来可视化整个网络,TensorBoard是一个用于可视化TensorFlow图和训练过程的工具。


占位符


占位符,顾名思义表示占位,是指等待被初始化/填充的tensors。占位符被用于训练数据,只有当代码是在会话中运行的时候占位符才会被填充。“喂给”占位符的东西叫做feed_dict。Feed_dict是用于存储数据的(一系列)键值对:

上例输出结果为6.

4. 在TensorFlow中应用设备 

TensorFlow具有非常强大的内置功能,可以在gpu, cpu或者gpu集群上运行你的代码。 它为你提供了选项,使你能选择要用来运行代码的设备。 这里不对此进行详细介绍,随后会有单独关于这个主题的教程。先来看一下TensorFlow全貌:

第二部分: 简单代码样例

这部分我们会学习线性回归的代码,首先来看几个代码中用到的TensorFlow函数:

创建随机正态分布:

使用random_normal创建服从正态分布的随机值。本例中,w是一个784*10的变量,其中的值服从标准差为0.01的正态分布。

Reduce_mean:

计算一个数组的均值

输出35

ArgMax:

类似于python中的argmax, 返回沿指定轴方向上,tensor最大值的索引

输出:array([2, 0]), 表示每一行中最大值的索引。

线性回归练习:

问题描述:线性回归中,开始时有很多数据点,我们的任务是用一条直线来拟合这些点。本例中,我们将生成100个点,并拟合他们。


生成训练数据


trainX的值位于-1和1之间。

trainY是trainX的3倍外加一些干扰值。


占位符


定义两个占位符,用于随后填充训练数据


建模

线性回归的模型是 y_model = w * x, 我们需要计算出w的值。首先可以初始化w为0来建立一个模型, 并且定义cost函数为(Y – y_model)的平方。TensorFlow中自带了许多优化器(Optimizer),用来在每次迭代后更新梯度,从而使cost函数最小。这里我们使用GradientDescentOptimizer以0.01的学习率来训练模型, 随后会循环运行该训练操作:


训练


目前为止,我们仅仅是定义好了图,还没有任何具体的计算。

TensorFlow的变量还没有被赋值。为了真正运行定义好的图,还需要创建并运行一个会话,在此之前,可以先定义初始化所有变量的操作init:

第一步,在session.run()中调用init完成初始化操作。随后我们通过向feed_dict“喂”数据来运行train_op。迭代完成之后,我们打印出最终的w值,应该接近3。


练习


如果你又新建了一个会话,会输出什么结果呢?

将会输出0.0, 这就是符号计算(symbolic computation)的思想, 一旦脱离了之前的会话,所有的操作都不复存在。

原文发布时间为:2017-12-20

本文作者:ANKIT SACHAN

本文来自合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

时间: 2024-10-01 02:10:52

独家 | 10分钟带你上手TensorFlow实践(附代码)的相关文章

10分钟带你理解Java中的弱引用_java

前言 本文尝试从What.Why.How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义.基本使用场景和使用方法. 一. What--什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference<T>类,我们首先来看一下官方文档对它做的说明:      弱引用对象的存在不会阻止它所指向的对象被垃圾回收器回收.弱引用最常见的用途是实现规范映射(canonicalizing mappings,比如哈希表).      假设垃圾收集器在某个

独家 | 一文读懂TensorFlow(附代码、学习资料)

人工智能.机器学习和深度学习 在介绍TensorFlow(以下简称为TF)之前,我们首先了解一下相关背景. TF是一种机器学习框架,而机器学习经常和人工智能,深度学习联系在一起,那么三者到底是什么关系呢? 简单来讲三者可以理解为包含于被包含的关系.其中最大的是人工智能(以下简称为AI),AI最早起源于1956年的达特茅斯会议,当时AI的几位先驱在会上展示了最早的AI程序:Logic Theorist,能够自动推导数学原理第二章前52个定理中的38个,甚至其中一个定理的证明过程比书中给出的还要优雅

手把手教你由TensorFlow上手PyTorch(附代码)

当我第一次尝试学习 PyTorch 时,没几天就放弃了.和 TensorFlow 相比,我很难弄清 PyTorch 的核心要领.但是随后不久,PyTorch 发布了一个新版本,我决定重新来过.在第二次的学习中,我开始了解这个框架的易用性.在本文中,我会简要解释 PyTorch 的核心概念,为你转入这个框架提供一些必要的动力.其中包含了一些基础概念,以及先进的功能如学习速率调整.自定义层等等.   PyTorch 的易用性如何?Andrej Karpathy 是这样评价的 资源 首先要知道的是:P

Intercom的持续部署实践:一天部署100次,1次10分钟

本文讲的是Intercom的持续部署实践:一天部署100次,1次10分钟,[编者的话]这篇博文分享了 Intercom 公司在持续部署的经验和体会.Intercom 公司从创业起步时就开始认定持续部署的重要性,从2002年每天10次部署,到今年每天接近100次的部署,积累了丰富的经验,对持续部署有着较为深刻的认识,虽然本文没有详尽的技术细节,所谓的干货,不过个中经验分析,比如 "帮助新来的工程师"这个想法蛮有新意,另外正如文中所说 -- "部署时间的增加,会使你的产品变得越来

10分钟23张图,带你了解中国互联网现状

文章讲的是10分钟23张图,带你了解中国互联网现状,7月23日,中国互联网络信息中心(CNNIC)发布<第36次中国互联网络发展状况统计报告>.CNNIC报告起始于1997年,每半年发布一次,记录中国互联网发展详实数据.据今年的第36次报告显示,截至2015年6月,中国网民规模达6.68亿,中国手机网民规模达5.94亿.接下来雷锋网就为大家摘取一些数据,让大家直观的了解中国互联网的现状. 网民数据总体网民规模 截至2015年6月,我国网民规模达6.68亿,半年共计新增网民1894万人.互联网普

王家卫《一代宗师》热卖独家解密10分钟片花

<一代宗师>巨幅海报 柏林街头的"章子怡" 路人和"宗师"相遇 梁朝伟宗师气度 新浪娱乐讯 2000年,李安执导的动作片<卧虎藏龙>掀起美国在内的全球市场对于中国动作片的热情.10年过去,诸多中国导演追随这股浪潮尝试动作片拍摄后,王家卫的首部功夫片<一代宗师>才于近日柏林电影节EFM(欧洲电影市场)亮相.据透露,短短数日内,该片已售出亚洲.荷兰.比利时.卢森堡.法国.西班牙等20个国家和地区的发行权. 值得一提的是,数家知名老牌电

《面向机器智能的TensorFlow实践》安装TensorFlow10

本节书摘来自华章出版社<面向机器智能的TensorFlow实践>一书中的第1章,第节,作者山姆·亚伯拉罕(Sam Abrahams)丹尼亚尔·哈夫纳(Danijar Hafner)[美] 埃里克·厄威特(Erik Erwitt) 阿里尔·斯卡尔皮内里(Ariel Scarpinelli),更多章节内容可以访问"华章计算机"公众号查看. 安装TensorFlow 在开始使用TensorFlow之前,需要先将其安装到计算机中.幸运的是,TensorFlow官网提供了一份在Lin

教你10分钟让百度收录自己的新网站

有段时间没写文章了,今天突然想写点什么,因为水平不高,还真想不到能写出点什么一鸣惊人的文章,就跟大家分享一下我刚刚做的新网站减肥方法是如何在10分钟内让百度收录首页的吧.这里说的10分钟其实不止10分钟,还需要做点前期准备工作.这个"前期准备"不是很麻烦,也费不了大家多少时间,因为我自己有好几个网站,平时免不了要为自己的网站做优化,所以我的刀(准备工作)不用现磨,毕竟每个人做网站优化所用的武器不一样,也可能你是用剑的,也或许你是用锤的,如果大家想用我这方法"10分钟让百度收录

Linux下LCD 10分钟自动关屏的问题总结

Linux下的LCD驱动默认10分钟后会自动关闭屏幕,我们可以修改一下代码让其不自动关屏 在有一个 drivers/char/vt.c 文件其中有一个变量(blankinterval)可以设置它来修改自动关屏的时间,也可以在函数(blank_screen_t)开头直接返回,这样就永远不会关屏了   在用LCD显示的时候,发现10分钟LCD就不再工作了.确实,Linux下有一个参数blankinterval的值就是10*60*Hz. 它决定了LCD只显示10分钟,然后LCD控制器就被关掉了. 具体