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>]

Tensorflow—Graphs and Sessions介绍

由Tensorboard生成的Graph

要运行此图,让我们创建一个Tensorflow会话,并以r = 5作为输入运行该会话

with tf.Session() as sess:

print(a.eval(feed_dict={r: [5]}))

您可以为会话之前定义的占位符值提供python词典,其中键是占位符名称,值可以是列表。

对于像Keras和Tensorflow Estimators这样的新的高级API,开发人员不再需要担心这些基本概念,但是从长远来看,仍然具备内部工作知识可能是非常有益的。

相关推荐