照猫画虎地使用了一段时间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架构分析 tensorflow底层架构_人工智能

从以上示例中可以看到,TensorFlow程序通常被组织成两个阶段,一个是图构建阶段,一个是图执行阶段。

在图构建阶段,定义数据(张量Tensor)和操作(节点Op),数据与操作的执行步骤被描述成一个图。

在图执行阶段,使用会话来执行构建好的图,即调用各种资源将定义好的数据和操作运行起来。

tensorflow架构分析 tensorflow底层架构_tensorflow_02

 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())