TensorFlow的解释及基本概念
Tensor就是张量,可以理解为多维数组,表示一种数据结构,Flow则表示一种计算模型,TensorFlow是一个通过计算图的形式来表达计算的编程系统。TensorFlow中的每一个计算都是计算图中的一个节点,而节点之间的边描述了计算之间的依赖关系。
下面是TensorFlow中有关计算图,张量,会话的基本概念。
计算图
在TensorFlow中,程序会自动维护一个默认的计算图,如果没有特殊指定,系统会自动将定义的计算加入默认的计算图中。
通过tf.get_default_graph()函数可以获取默认是计算图。如果有一个张量的引用a,可以通过a.graph来获取其计算图。
例如:
a = tf.constant([2,5],name="a")
print a.graph
#输出<tensorflow.python.framework.ops.Graph object at 0x10542e8d0>
print tf.get_default_graph()
#输出<tensorflow.python.framework.ops.Graph object at 0x10542e8d0>
除了使用默认的计算图,可以利用tf.Graph()函数来生成新的计算图,不同的计算图中的张量和计算都不能共享。
计算图可以通过device()函数来指定运行计算的设备。
例如:
g = tf.Graph()
with g.device(“/gpu:0”)
result = a + b
张量
一个张量有三个属性,比如a = tf.constant([3.0,4.0],name=”a”) ,
a 为一个张量,直接输出a, 结构为Tensor(“a:0”, shape=(2,), dtype=float32)
a有三个属性,name(名字)/ shape(纬度)/dtype(类型)。
第一个属性是name,通过node:src_output的形式给出,node为节点名称,src_output表示当前张量来自节点的第几个输出。
第二个属性是shape,shape=(2,)表示张量是一个一维数组,数组长度为2。
第三个属性是dtype,TensorFlow会对参与运算的所有张量进行类型检查,当发现类型不匹配时会报错。
张量有两个主要的作用:
(1)对中间结果的引用,比如a = tf.constant([3.0,4.0],name=”a”) ,a就是对constant函数的结果的引用.
(2)用于获取计算结果。例如tf.Session().run(result)
运行会话(session)
TensorFlow运行会话的方式有两种,一种是直接调用回话生成函数和关闭函数。
例如:
sess = tf.Session() #创建回话
sess.run() #得到运算结果
sess.close() #关闭回话,释放资源
为了避免run()函数异常退出,造成资源没有释放而泄露,利用python的上下文管理器在退出时来自动释放资源。
如:
with tf.Session() as sess:
sess.run()
通常情况下,TensorFlow会自动生成一个默认的计算图,如果没有特殊的指定,计算会自动加入这个计算图中,但是TensorFlow不会自动生成一个默认的会话,需要手动指定。当默认会话被指定之后,可以通过调用tf.Tensor.eval()函数来计算张量的取值。
例如:
sess = tf.Session()
with sess.as_default():
print(result.eval())