照猫画虎地使用了一段时间TensorFlow,开源项目也调了好些个,但是在深入到具体细节的时候,发现完全不知其所以然。所以决定抽点时间把基础知识补一补,省得以后继续抓瞎。
众所周知,TensorFlow是由Google开源的机器学习算法库,自2015年发布以来,在全球范围内受到了极大的关注,用户量一直居于各大机器学习框架之首。TensorFlow支持PC、服务器、移动端、嵌入式等各种平台,开放了Python、C++和Java等语言的接口,可以说受众非常广。对于初学者来说,Python无疑是上手最快的。
TensorFlow中几个比较重要的概念是:图、会话、张量、节点。
图:TensorFlow中将计算表示为指令之间依赖关系的一种方法。
会话:TensorFlow跨一个或多个本地或远程设备运行数据流图的机制。
张量:TensorFlow中的基本数据对象。
节点: 提供图中执行的操作。
以上解释比较抽象,下面一个经典小例子可以帮助理解。
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# Create graph
g = tf.Graph()
#在图中定义数据和指令关系
with g.as_default():
a = tf.constant(2)
b = tf.constant(6)
c = tf.add(a, b)
print("Without session, c = ", c)
#init = tf.initialize_all_variables() # would be deprecated usage
init = tf.global_variables_initializer()
#在会话中执行图
#Implement graph in session
with tf.Session(graph = g) as sess:
sess.run(init)
print("With session, c = ", sess.run(c))
以上例子的执行结果为:
从以上示例中可以看到,TensorFlow程序通常被组织成两个阶段,一个是图构建阶段,一个是图执行阶段。
在图构建阶段,定义数据(张量Tensor)和操作(节点Op),数据与操作的执行步骤被描述成一个图。
在图执行阶段,使用会话来执行构建好的图,即调用各种资源将定义好的数据和操作运行起来。
TensorFlow的名称其实已经很好地反应了该框架的特点,即Tensor + Flow,使用数据的流动(数据流图)来实现数值计算。如上图所示,节点(Operation)在图中表示数学操作,线(Edges)则表示在节点间流动的多维数据,也就是张量Tensor。
注:以上例程基于TensorFlow 1.x,在TensorFlow 2.x中,对使用步骤执行了简化。不再需要在会话中执行计算,而是直接执行计算,如下:
import tensorflow as tf
#定义常量a,b
a = tf.constant(2)
b = tf.constant(6)
#执行加法计算
c = tf.add(a, b)
print("c = ", c.numpy())
今天先写这么多,后续会抽空持续更新。