TensorFlow学习笔记(一)
TensorFlow是目前最火的深度学习框架。
TensorFlow的环境搭建官网和其他博客都有较多例子,这里不再重复。
本机实验环境macOS Sierra 10.12.3
tensorflow 1.0.0 CPU版本
Python 3.6.0
TensorFlow测试样例
首先TensorFlow支持C、C++、Python等语言。这里只介绍Python语言的TensorFlow的样例。
1 | # 为了简洁,常采用tf来代替tensorflow作为模块名 |
- 要输出相加的结果,不能简单的输出result,而是要先生成一个会话(session),并且通过这个会话来计算结果。这就是一个非常简单的TensorFlow模型。
TensorFlow入门
TensorFlow计算图
TensorFlow包括俩个重要概念——Tensor和Flow。Tensor就是张量。Flow是流。TensorFlow是一个通过计算图形式来表述计算的编程系统。TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。
官网给出了一个演示数据流的图。
TensorFlow计算图的使用
TensorFlow程序一般可以分为2个阶段。第一个阶段要定义计算图中所有的计算。第二个阶段为执行计算。
1 | import tensorflow as tf |
除了使用默认的计算图,TensorFlow还支持通过使用tf.Graph来生成新的计算图,不同计算图上的张量和运算都不会共享。
1 | import tensorflow as tf |
上面代码产生了两个计算图,每个计算图中定义了一个名字为”v”的变量。在计算g1中,将v初始化0;在计算图g2中,将v初始化为1。当运行不同的计算图时,变量v的值也不一样。TensorFlow中的计算图不仅仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制。计算图可以通过tf.Graph.device函数来指定运行计算的设备。
1 | # 例如 |
TensorFlow数据模型——张量
在TensorFlow中所有的数据都通过张量的形式来表示。从功能角度的看,张量可以被简单理解为多维数组。零阶张量表示标量,也就是一个数。一阶张量是向量,也就可以看成一维数组;第n阶张量也可以看成n维数组。但张量并不是直接采用数组的形式,它只是对TensorFlow中运算结果的引用。张量中并没有真正保存数字,保存的是如何得到这些过程的计算过程
。张量的类型当然也可以是字符串,这里先不讨论。
1 | import tensorflow as tf |
TensorFlow运行模型——会话(Session)
- 明确调用会话生成函数和关闭会话函数,使用这种模式要明确调用Session.close函数关闭会话而释放资源。然而如果程序异常退出时则不会调用close导致资源泄露。
1 | import tensorflow as tf |
- 使用python的上下文管理器的机制,将所有的计算放在with的内部就可以自动释放所有资源。
1 | with tf.Session() as sess: |
- TensorFlow会自动生成默认的计算图,如果没有特殊指定,运算会自动加入这个计算图中,TensorFlow中的会话也有类似机制,但不会自动生成默认的会话,而是需要手动指定。当默认的会话被指定之后可以通过tf.Tensor.eval函数来计算一个张量的取值。
1 | sess = tf.Session() |
- TensorFlow提供了一个直接构建默认会话的函数。使用这个函数会自动将生成的会话注册为默认会话。
1 | sess = tf.InteractiveSession() |