Tensorflow—Graphs and Sessions介绍
Tensorflow一直是最受欢迎的高性能数值计算开源软件库,自从谷歌开源以来,它在机器学习从业者中非常受欢迎。它已经成为深度学习项目框架之一,因为它具有丰富的功能和抽象大量样板代码和配置的能力,而不会降低灵活性和可扩展性。但是,本文将尝试讨论使用Keras或Tensorflow估计器等高级API时不需要的一些基本要点。
什么是graph?
Tensorflow有一个延迟计算,换句话说,Tensorflow会首先创建一个计算图,将操作作为图的节点和它边缘的张量,并当图在会话中执行时执行。这通常称为 dataflow编程模型,专门用于并行计算。
例如在普通python中
a = 'Hello World'
print(a)
会把Hello World打印到输出中,但是在Tensorflow,
a = tf.constant("Hello World")
print(a)
将输出Tensor(“Const:0”,shape =(),dtype = string)。是因为我们还没有在会话中运行计算图,所以Tensorflow仍然只创建了图。
使用graphs有什么好处?
- 并行。通过使用显式边来表示操作之间的依赖关系,系统很容易识别可以并行执行的操作。
- 分布式执行。通过使用显式边来表示操作之间流动的值,TensorFlow可以将程序划分到连接到不同计算机的多个设备(CPU,GPU和TPU)上。TensorFlow在设备之间插入必要的通信和协调。
- 汇编。TensorFlow的XLA编译器可以使用数据流图中的信息生成更快的代码,例如,通过将相邻操作融合在一起。
- 可移植性。数据流图是模型中代码的独立于语言的表示形式。您可以在Python中构建数据流图,将其存储在SavedModel中,并在C ++程序中将其还原以进行低延迟推理。
让我们构建一个简单的图并执行它
让我们创建一个计算图来计算圆的面积。计算圆的面积的数学函数是:a =πr^ 2
首先让我们定义我们的图:
pi = tf.constant(3.14, name="pi")
r = tf.placeholder(tf.float32, name="r")
a = pi * r * r
我们有一个常量“pi”和一个“r”的占位符,它将作为输入被输入到这个图形中。
让我们检查节点的图和值。默认情况下,Tensorflow会为您创建一个graph ,但您也可以创建自己的graph 。
graph = tf.get_default_graph()
print(graph.get_operations())
输出看起来像这样: [<tf.Operation ‘pi’ type=Const>, <tf.Operation ‘r’ type=Placeholder>, <tf.Operation ‘mul’ type=Mul>, <tf.Operation ‘mul_1’ type=Mul>]
由Tensorboard生成的Graph
要运行此图,让我们创建一个Tensorflow会话,并以r = 5作为输入运行该会话
with tf.Session() as sess:
print(a.eval(feed_dict={r: [5]}))
您可以为会话之前定义的占位符值提供python词典,其中键是占位符名称,值可以是列表。
对于像Keras和Tensorflow Estimators这样的新的高级API,开发人员不再需要担心这些基本概念,但是从长远来看,仍然具备内部工作知识可能是非常有益的。