TensorFlow是目前很火的一款深度学习框架,其源码是用C++写的,保证了运行速度,其又提供了Python的接口,大大降低了程序猿们学习新语言的成本,所以在深度学习领域广为流行。
但是很多人在初学TensorFlow时会觉得有些难以入手,霎时间接触诸如张量、图、会话等概念会有点吃力,所以本文将介绍如何快速入门TensorFlow并上手写代码,一边实践一边理解概念,提升学习速度。
1 安装
安装TensorFlow有多种方式,为了快速上手写代码,这里介绍一种最为简单的方法,像安装其他Python库一样,直接用pip就好,即在命令行中输入:
1 | pip install tensorflow |
注1:还可以通过Docker安装或从源码安装。
注2:此处安装的是仅支持CPU版本的,支持GPU版本的将在后续文章中说明。
2 使用
在使用的第一步,惯例我们先引入tensorflow库,为方便起见,将其用tf
简写,如下:
1 | import tensorflow as tf |
2.1 tensor
tensor即张量,是TensorFlow中所有数据的基本表现形式,TensorFlow中的常量、变量都属于张量。
2.1.1 常量
1 | a = tf.constant([[1.,2.],[3.,4.]],name='const_a') |
这段代码创建了一个常量a,直接输出后的结果如下:
1 | Tensor("const_a:0", shape=(2,2), dtype=float32) |
可以看到直接输出的结果并不是我们给定的值,而是一个张量的结构。(输出值需要在会话中进行,下文会进行介绍)
其中const_a:0
表示a
是const_a
的第一个值(也是唯一一个),shape代表维度,(2,2)表示此张量是个2x2的矩阵,第三个属性为数据类型。
常用的常数生成函数还有:
1 | # 产生全是0的2x3矩阵 |
2.1.2 变量
变量在TensorFlow中十分重要,因其可以在计算中修改,所以神经网络的模型参数一般使用变量。
创建变量可以直接调用Variable函数,将值传入即可。
1 | # 创建一个全1的2x2矩阵 |
需要注意的是,使用变量时,需要对其进行初始化:
1 | init = tf.global_variables_initializer() |
2.2 Session
Session即会话,TensorFlow中,所有操作都只能在会话中进行。
假如我们想求上文中创建的常量a和变量x的和,完整代码如下:
1 | import tensorflow as tf |
注1:创建常量、变量时的name参数可省略
注2:创建Session的另一种方法:
1
2
3
4
5
6 # 创建会话
sess = tf.Session()
# 调用会话来执行节点的计算,假如是上例中的add
sess.run(add)
# 执行结束后关闭会话
sess.close()
这种方式不好的地方在于当程序因为异常而退出时,Session.close()可能不会执行从而导致资源泄露。
运行后输出如下:1
2[[2. 3.]
[4. 5.]]
2.3 Graph
至此,你是否隐约感受到了TensorFlow在运行时的一点不同?
不同于一般的程序,TensorFlow程序有两个阶段:
- 定义计算
- 执行计算
也就是说TensorFlow会将所有运算都定义好后再在Session中执行,不像一般程序,可以一边定义一边执行。
事实上,TensorFlow在进行第一个阶段时就是将计算定义在了一个图(Graph)里,在上文中,是将操作放到了TensorFlow默认提供的一张计算图中了,当然,我们也可以自己新建一张图,如下:
1 | # 创建一张图g |
2.4 拟合线性回归
了解了上述基本概念和操作,接下来,我们来动手实践来拟合y=0.1x+0.2
这个函数吧。
1 | import tensorflow as tf |
训练结果如下:
1 | 0 [1.7758392, 0.34141564] |
可以看出,在训练了201次后,k值和b值都分别非常接近0.1和0.2了。
3 参考资料
[1]TensorFlow中文社区.基本用法 | TensorFlow 官方文档中文版
[2]郑泽宇,梁博文,顾思宇.TensorFlow:实战Goole深度学习框架(第2版)[M].北京:电子工业出版社.2018-02
[3]@Bilibili.深度学习框架Tensorflow学习与应用.2018-03