致远行的人,自编TensorFlow教程(1)

来源:互联网 发布:反美颜软件app 编辑:程序博客网 时间:2024/05/01 00:04

这是本人自编的 TensorFlow 教程,本人对 TensorFlow 理解有限,请各位看官轻喷。本教程适用于 Python 基础不够好的同学,但仍然要求懂一些Python的基本语法。因为追求更加通俗易懂,本教程追求代码完整,描述冗长,请各位耐心看。谢谢!

首先是关于 TensorFlow 的安装,请参考
http://www.tensorfly.cn/tfdoc/get_started/os_setup.html
TensorFlow中文社区的安装指南,不过这个网站确实有长期不更新的感觉(没有实际证据)。同时Windows下也已经可以安装TensorFlow了,在下没有尝试过,也许需要熟悉Python的同学协助你;Linux或者MacBook使用pip即可安装。同时本教程基本使用CPU跑TensorFlow,请想使用GPU的同学自行学习。

本教程所有的代码都基于 Python3.6。

关于 TensorFlow 的最大的坑:API 频繁更改,请参考 http://devdocs.io/ 这个网站,上面有最新的 API 文档。当然,如果你可以翻墙上 TensorFlow 官网,或者上官网毫无压力,请上官网查阅相关文档。

以上是写在前面。如果有些地方看不懂,没有关系,只要装好TensorFlow就好,因为“Talk is cheap. Show me the code.”

在学习一门新的语言时,大家总是想先学如何写出“Hello, world!”程序。我们也从类似的打印输出开始吧,不过不是“Hello, world!”。

很多教程喜欢把步子迈得太大,在下智商有限,喜欢小步伐前进,同时更加平稳,注重细节。同时每段代码都是全的,就是说copy即可运行。

import tensorflow as tfnum = tf.constant([1, 2])init = tf.global_variables_initializer()with tf.Session() as sess:    print(sess.run(num))

这段代码的输出很简单,就是打印[1 2],可自行跑一下,和打印“Hello, world”一个意思。稍微熟悉点编程的人都会说:“你TM在逗我!”。确实,打印一个变量,在Python里完全可以这样写(不要在意有没有逗号的区别,谢谢):

num = [1, 2]print(num)

但放这么简单的代码出来,还是需要说一些 TensorFlow 的基本规则的,麻雀虽小五脏俱全嘛,接下来我会详细解释代码。

首先,一个用 TensorFlow 框架写的代码有两部分组成:定义一张计算图;在一个会话中启动图。也许你会不知道我在说什么,总之先记住有两部分组成。

num = tf.constant([1, 2])

这行代码是在TensorFlow的图里定义一个常量(注意,它不是变量)。tf.constant 这个API是用来定义常量的。然后在这段代码里,计算图就定义完了(说好的计算呢,这个慢慢会解释)。
注:出现tf当然是因为import tensorflow as tf这行代码,基础差的可以先不用管,记得照着写上这一行就行了。

init = tf.global_variables_initializer()

这行代码是初始化计算图,就是为一些变量开辟空间,同时将计算模型固定。严格来说我不能准确描述清楚这行代码的目的及意义,不过可以先照着写就可以了,没有这行代码一定会报错。

with tf.Session() as sess:    print(sess.run(num))

然后就是用会话启动图了,首先要定义会话,为什么要定义会话呢?目前我理解有限,只能说TensorFlow的规定是这样。至于为什么要写成

with tf.Session() as sess: 

这样去定义会话,主要是因为省事,另一种定义会话的方式是

sess = tf.Session()# 加上其他代码sess.close()

你需要多写一行代码,为了避免忘记,建议用with。对了,为什么要close,目前我也只能说这也是规定,照着写就行了。

然后我们用sess.run()去计算图。比如sess.run(num)就是要求得到计算图里面num的计算结果。关于sess.run(),下一节会有更详细的介绍。

今天就介绍到这儿,万事开头难,会了基本规则,一般情况下可以先随意魔改一下代码,祝大家魔改顺利。