原文标题:TensorFlow Tutorial: 10 minutes Practical TensorFlow lesson for quick learners

作者:ANKIT SACHAN

翻译:和中华

校对:程思衍

本文长度为2000字,建议阅读10分钟

通过这篇文章,你可以了解TensorFlow中最基础的几个概念,还可以学习最简单的线性回归如何在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)的思想, 一旦脱离了之前的会话,所有的操作都不复存在。

希望这篇教程能帮你在学习TensorFlow之路上开一个好头, 有任何问题都可以在评论区留言提问,完整的代码可以在这里下载:

https://github.com/sankit1/cv-tricks.com

还可以跟着第二个教程继续学习TensorFlow:

http://cv-tricks.com/tensorflow-tutorial/training-convolutional-neural-network-for-image-classification/

原文链接:

http://cv-tricks.com/artificial-intelligence/deep-learning/deep-learning-frameworks/tensorflow/tensorflow-tutorial/


和中华,留德软件工程硕士。由于对机器学习感兴趣,硕士论文选择了利用遗传算法思想改进传统kmeans。目前在杭州进行大数据相关实践。加入数据派THU希望为IT同行们尽自己一份绵薄之力,也希望结交许多志趣相投的小伙伴。

翻译组招募信息

工作内容:将选取好的外文前沿文章准确地翻译成流畅的中文。如果你是数据科学/统计学/计算机专业的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友,数据派翻译组欢迎你们加入!

你能得到:提高对于数据科学前沿的认知,提高对外文新闻来源渠道的认知,海外的朋友可以和国内技术应用发展保持联系,数据派团队产学研的背景为志愿者带来好的发展机遇。

其他福利:和来自于名企的数据科学工作者,北大清华以及海外等名校学生共同合作、交流。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。


点击“阅读原文”加入组织~

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

  1. java编程石头剪刀布图片_石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源...

    原标题:石头.剪刀.布!10分钟带你打开深度学习大门,代码已开源 沉沉 发自 宇宙中心 量子位 出品 | 公众号 QbitAI 深度学习技术的不断普及,越来越多的语言可以用来进行深度学习项目的开发,即 ...

  2. 10分钟带你了解python_10分钟Python入门系列教程及学习资源分享

    本期分享笔记内容 归档此前入门教程文章,方便查看 10分钟带你Python入门的特点 简单谈下如何寻找Python学习资源 关于分享Python学习资源的分享问题 本人对于Python学习创建了一个小 ...

  3. 10分钟带你彻底搞懂服务限流和服务降级

    文章目录 十分钟搞懂系列 服务限流 计数器法 滑动窗口法 漏桶算法 令牌桶算法 服务降级 十分钟搞懂系列 序号 标题 链接 1 10分钟带你彻底搞懂企业服务总线 https://blog.csdn.n ...

  4. 10分钟带你探索css中更为奇妙的奥秘

    10分钟带你探索css中更为奇妙的奥秘

  5. 10分钟带你学会微信小程序的反编译

    以xxxxx小程序为例10分钟带你学会微信小程序的反编译 2019-11-28 12:59:26 以一个简单的例子介绍下小程序反编译操作流程 实验环境 前置准备 模拟器内软件安装 获取小程序包 开始解 ...

  6. 10分钟带你彻底搞懂微内核架构

    文章目录 十分钟搞懂系列 什么是微内核架构? 如何实现微内核架构? 总结 十分钟搞懂系列 序号 标题 链接 1 10分钟带你彻底搞懂企业服务总线 https://blog.csdn.net/belon ...

  7. 10分钟带你了解MSTP协议,附加配置MSTP实验

    10分钟带你了解MSTP协议,附加配置MSTP实验 目录 10分钟带你了解MSTP协议,附加配置MSTP实验 一 MSTP协议 [1]STP和RSTP的局限性 [2]关于MSTP [3]MSTP的基本 ...

  8. 10分钟带你彻底搞懂负载均衡

    文章目录 十分钟搞懂系列 负载均衡是如何保证软件系统的生产部署的? 负载均衡分发策略 请求由谁来分发? 服务器端负载均衡器 客户端负载均衡 请求分发到哪去? 静态负载均衡算法 动态负载均衡算法 十分钟 ...

  9. 独家 | 手把手教TensorFlow(附代码)

    上一期我们发布了"一文读懂TensorFlow(附代码.学习资料)",带领大家对TensorFlow进行了全面了解,并分享了入门所需的网站.图书.视频等资料,本期文章就来带你一步步 ...

最新文章

  1. DATETIME类型和BIGINT 类型互相转换
  2. DotNet指定文件显示的尺寸
  3. list-style-type:decimal在IE中显示全是1的解析
  4. 华为鸿蒙与佳华,华为鸿蒙系统发布,带来三大好消息
  5. Ubuntu16.04下制作deb包的方法详解
  6. linux 下/proc/cpuinfo三级缓存,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  7. angularjs -- 监听angularJs列表数据是否渲染完毕
  8. ahjesus自定义隐式转换和显示转换
  9. Linux基础之常用命令篇
  10. 使用U盘全新安装Mac OS X EI Capitan
  11. 黑盒测试方法用例设计详解
  12. Struts2的面试问题(一)
  13. 2022年山东省安全员B证考试练习题及在线模拟考试
  14. RouterOS IPv4转IPv6环境搭建
  15. AliDDNS 阿里云动态域名服务 实用工具
  16. 分享几个蛋白质互作网站——String (二)多基因蛋白互作
  17. 实验9(延伸) 多元函数微分法及其应用
  18. 【DOORS】如何基于DOORS实施需求管理
  19. 洛克菲勒:世界上只有两种人头脑聪明...
  20. 网络攻防——黛蛇蠕虫病毒

热门文章

  1. [Android]上传到多个Maven仓库的Gradle插件RapidMavenPushPlugin
  2. 第一款支持容器和云部署的开源数据库Neo4j 3.0
  3. Android 侧划菜单
  4. 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;...
  5. [shell] 一个printf 打印 8 进制码的问题
  6. 为你的网站使用paypal
  7. python为什么运行慢_为什么你写的Python运行的那么慢呢?
  8. unity 关闭自己脚本_Unity3D 挂载的脚本取消勾选居然还会运行!!
  9. chmod a+r *:用户自己使用此命令,柯给所有用户添加可读的权限
  10. remote: 此仓库的限制大小为: 2048 MB, 您的使用已经超出限额