主要参考:stanfordCS20 ;tensorflow官方文档
一、graph和session
tensorflow将运算的定义与执行分开,采用graph(图)来表示计算任务,在session(会话)中执行图中定义的操作。
二、tensor
tensorflow中使用tensor(张量)来表示数据。所谓的tensor,就是n维数组。
0-d:scalar,数字;1-d:vector;2-d:matrix
三、获取运算结果
定义了一系列操作后,并不能直接获取想要的值,必须启动session。session封装了一个执行操作,给张量赋值的环境,同时给现在的变量分配内存。在Python中,启动session通常有两种方法:
第一种方法:
sess=tf.Session()
print(sess.run(a))
sess.close()
第二种方法:
with tf.Session() as sess:
print(sess.run(a))
session会给graph赋值,计算所有指向a的节点,找到a的值。因此如果此前定义了无关变量,则在这个session中不参加运算。
四、分布计算
将一个图分成多个子图,在不同的GPU/CPU上计算是可行的。指定运算单元的方法如下:
# Creates a graph.
with tf.device('/gpu:2'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], name='b')
c = tf.multiply(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))
"/cpu:0"
: 机器中的 CPU"/gpu:0"
: 机器中的 GPU, 如果你有一个的话."/gpu:1"
: 机器中的第二个 GPU, 以此类推...
尽量不要建立多个图,而是在一个图中建立无联系的子图。
五、为什么使用图
1、节约计算资源。只计算需要的子图。
2、将计算分为小的、可微分的片段以促进auto-differentiation(自动微分运算)
3、使分布计算更容易实现
4、许多机器学习模型使用图来可视化