这是本人自编的 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 tf
num = 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(),下一节会有更详细的介绍。
今天就介绍到这儿,万事开头难,会了基本规则,一般情况下可以先随意魔改一下代码,祝大家魔改顺利。