TensorFlow 的设计理念

TensorFlow 的设计理念主要体现在以下两个方面。


    (1)将图的定义和图的运行完全分开

        我们知道,编程模式通常分为命令式编程(imperative style programming)和符号式编程(symbolic style programming)。命令式编程就是编写我们理解的通常意义上的程序,很容易理解和调试,按照原有逻辑执行。符号式编程涉及很多的嵌入和优化,不容易理解和调试,但运行速度相对有所提升。现有的深度学习框架中, Torch 是典型的命令式的, Caffe、 MXNet 采用了两种编程模式混合的方法,而 TensorFlow 完全采用符号式编程。符号式计算一般是先定义各种变量,然后建立一个数据流图,在数据流图中规定各个变量之间的计算关系,最后需要对数据流图进行编译,但此时的数据流图还是一个空壳儿,里面没有任何实际数据,只有把需要运算的输入放进去后,才能在整个模型中形成数据流,从而形成输出值。
        例如:

t = 8 + 7
print("t:", t)

        输出的结果就是:

t: 15

        而在 TensorFlow中,数据流图中的节点,实际上对应的是 TensorFlow API 中的一个操作,并没有真正去运行,如下:

import tensorflow as tf
t = tf.add(8, 9)
print(t) 

        输出的结果却是:

Tensor("Add:0", shape=(), dtype=int32)

        这是因为上述代码只是定义了一个操作,实际上并没有运行.

(2) TensorFlow 中涉及的运算都要放在图中

        TensorFlow 中涉及的运算都要放在图中,而图的运行只发生在会话(session)中。开启会话后,就可以用数据去填充节点,进行运算;关闭会话后,就不能进行计算了。因此,会话提供了操作运行和 Tensor 求值的环境。

import tensorflow as tf

# 创建图
a = tf.constant([1.0, 2.0])
b = tf.constant([3.0, 4.0])
c = a * b

# 创建会话
sess = tf.Session()

# 计算 c
print(sess.run(c))

# 关闭会话
sess.close()

        结果:

[3. 8.]

ps:全部摘自李嘉璇的<<TensorFlow 技术解析与实战>>第四章4.2节

猜你喜欢

转载自blog.csdn.net/a857553315/article/details/93376421