首先来说一下TensorFlow的几个关键词:
图(graph)、会话、张量(tensor)、变量(Variable)、feed、fetch。
说一下上面关键词的作用:
- 用图(graph)来表示计算任务
- 在被称之为会话(Session)的上下文(context)中执行图
- 使用tensor表示数据
- 通过变量(Variable)维护状态
- 用feed和fetch可以为任意操作赋值或者从中获取数据
张量(tensor)是什么?
我们可以把张量认作是基于向量和矩阵的推广,举几个实例来表示一下N阶标量都代表什么:
阶 | 数学实例 | 实例表示 |
0 | 常数(只有大小) | s = 123 |
1 | 向量(有大小和方向) | v = [1.2,1.3,1.4] |
2 | 矩阵 | m = [[1,2,3],[4,5,6]] |
3 | 三阶张量 | t = [[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]] |
n | n阶张量 | 以此类推...... |
Tensorflow中用图来表示计算任务,图中的每个节点我们叫它OP,并且每一个OP都可以获得0个以上的tensor,然后执行计算后产生0个或多个tensor;而在计算图的时候为了能够进行计算,必须在会话(session)中启动图,session会将图上的OP分配到CPU、GPU等设备上(我们无需具体的定义使用CPU还是GPU,如果检测到GPU,TensorFlow会用检测到的第一个GPU来执行),同时提供执行OP的方法,执行完成后再将OP返回。
下面用具体的操作来讲解一下每一步的实际应用。
构建并启动图
先上一段代码看一下
运行结果
说明:
这是一段简单的使用TensorFlow计算常量矩阵相乘的代码,在TensorFlow中我们可以使用constant来创建常量OP,需要注意的是在执行OP的时候一定要先启动默认图:session = tf.Session() ,然后使用session.run()执行即可,使用session的run函数的时候就像是我们在使用一种编译器的时候进行编译执行一样。
另一种执行方法:
这样做的好处是我们无需再使用close释放资源,在with执行完后会自动进行close操作。
GPU
如果电脑上右多个可用的GPU我们可以用如下的语句来选择GPU
可以使用:
"/cpu:0" 表示使用第一个cpu
"/gpu:0" 表示使用第一个gpu
以此类推
变量(variable)
变量用来维护图执行过程中的状态信息,例如在神经网络总用于保存和更新神经网络上的参数。
举一个常见的例子,用变量来实现一个计数器,通过assign函数不断的给变量count赋计数后的值即可。
运行结果如下:
Feed和Fetch
Feed主要用于临时替换一个操作的输出结果,我们可以提供feed数据作为run()函数调用的参数,feed只在方法内有效,结束后feed就会消失,常见的一种形式是我们用tf.placeholder()来创建占位符,方便于feed在run()内的赋值。举例如下:
结果:
要注意一下multiply实现的是元素级别的相乘,两个相乘的数一定要有相同的数据类型,而matmul是矩阵相乘。
在之前的run()操作中,我们每次只返回了一个OP操作的值,Fetch一个可以返回多个OP值得属性。
结果如下:
以上就是对TensorFlow的一些基本操作和性质的解释和示例,后续还会更深一步的学习tf的其他用法。