30天从入门到精通TensorFlow1.x 第四天,TensorFlow中的计算图或数据流图

文章目录

  • 一、接前一天
  • 二、计算图或数据流图
    • 1. 什么是计算图或者数据流图
    • 2. 为什么需要计算图或者数据流图
    • 3. 执行顺序和延迟加载在tf中的使用

一、接前一天

这几天主要学习了张量的创建方法,以及变量变量命名域共享变量等概念。今天主要熟悉 数据流图或者计算图的概念

二、计算图或数据流图

1. 什么是计算图或者数据流图

(1). 计算图是tf基本计算单位之一,与张量一样都是基本的计算单位。
(2). tensorflow1中的数据流图,也被称为计算图,是一种用于表示机器学习模型的抽象概念。它由节点(Nodes)边(Edges)组成,其中节点代表操作或变量表示它们之间的依赖关系

当我们定义了一个tensorflow1的计算图后,我们可以使用tensorflow提供的Session对象对其进行计算。Session会将计算图中依赖关系解析出来,实现节点之间的数据流动,并最终生成输出结果。

在计算图中,每个节点可以接受零个或多个输入,并产生零个或多个输出每个输出都可以被视为一个张量(tensor),因此tensorflow的名字也正是由此而来。

通过这种方式,tensorflow将复杂的计算过程抽象成为一个图形结构,使得我们可以更加直观地理解模型的结构和逻辑,方便进行优化和调试。

例如:定义一个 加法

30天从入门到精通TensorFlow1.x 第四天,TensorFlow中的计算图或数据流图_第1张图片
节点表示操作(包括变量的创建、张量的数学运算、卷积操作等)表示操作之间的依赖关系。这里就是说在执行输出y之前需要执行 输入阶段和add节点。

节点可以接收零个或多个输入,产生零个或多个输出,每个输出又可以被视为一个tensor(张量)。在tensorflow中,张量是一种具有特定形状(shape)数据类型(dtype)多维数组,可以用来存储数据。

(3). 计算图上有两种操作

  1. 构建计算图
    创建api:
graph = tf.get_default_graph()
  1. 运算计算图

使用tensorflow提供的Session对象对其进行计算

2. 为什么需要计算图或者数据流图

  1. 可以高效地计算模型的前向传递和反向传播:TensorFlow使用数据流图来表示计算模型,它可以自动地计算模型的前向传递和反向传播。数据流图将计算过程划分为一系列节点(Nodes)和边缘(Edges),每个节点代表一个操作或函数,而边缘则表示节点间的依赖关系。TensorFlow可以通过在数据流图中进行迭代、优化和求导等操作,高效地计算模型的输出值和梯度。

  2. 可以实现延迟加载和分布式计算:TensorFlow支持延迟加载机制,这意味着它只有在需要时才会计算节点的值,而不是在图构建阶段就立即计算。这种机制可以降低内存占用和计算量,提高计算效率和灵活性,并且允许动态调整计算图结构和参数。同时,数据流图还可以方便地实现分布式计算,从而充分利用多台机器的计算资源,加速计算过程。

  3. 可以轻松地构建复杂的计算模型:TensorFlow提供了丰富的API,可以帮助用户轻松地构建各种复杂的计算模型,包括神经网络、卷积神经网络、循环神经网络等。通过在数据流图中添加不同类型的节点和边缘,用户可以描述具有各种功能和性能的计算模型,并利用TensorFlow高效地训练和优化这些模型。

例如

import tensorflow as tf

# 定义两个向量
a = tf.constant([1.0, 2.0, 3.0], name="a")
b = tf.constant([4.0, 5.0, 6.0], name="b")

# 定义向量加法操作
c = tf.add(a, b, name="add")

# 创建Session并执行图上的操作
sess = tf.Session()
result = sess.run(c)
print(result)

# 关闭Session
sess.close()

在这行代码中,我创建两个常量,并执行add操作。因为没有使用with模块,因此最后需要 .close()操作.
注意
TensorFlow会自动创建默认的数据流图,用户不需要显式的使用graph = tf.get_default_graph()创建。用户使用tf中的操作时候,都会自动添加到默认的计算图中。但是在多图中就要进行显式的创建

使用附带with模块的不需要.close()操作。

import tensorflow as tf

#y = wx + b

w = tf.Variable([0.3],dtype=tf.float32)
b = tf.Variable([-3],dtype=tf.float32)

x = tf.placeholder(tf.float32)

y = w*x + b
out = 0

with tf.Session() as sess:
    tf.global_variables_initializer().run()

    out = sess.run(y,{x:[1,2,3,4]})

print('out:',out)

3. 执行顺序和延迟加载在tf中的使用

  1. 执行顺序:在计算图中,每个节点代表了一个计算操作或函数,并且它们之间通过边连接来表示数据依赖关系。当计算图被执行时,节点将按照它们的输入输出以及边的顺序进行计算,并将它们的结果传递给它们所连接的节点。因此,计算图中的执行顺序通常是确定的,且与节点的位置形状颜色等外部特征无关

  2. 延迟加载:有些计算图框架支持延迟加载机制,即只有在需要时才计算节点的值,而不是在图构建阶段就立即计算。这种机制可以降低内存占用计算量,提高计算效率灵活性,并且允许动态调整计算图结构和参数。具体来说,当我们使用计算图框架构建模型时,只需要定义节点之间的依赖关系和计算规则,而不需要显式地指定每个节点的值。然后,当我们需要计算某个节点的值时,框架会自动递归地计算该节点所依赖的所有节点,并返回最终结果。这种机制类似于Python中的惰性求值(lazy evaluation),可以大大简化编程和调试过程。

例如:
我们想要控制图中节点的执行顺序,可以通过tf.Graph.control_dependencises()函数来实现:
比如:计算节点a,b,c,d希望在执行ab之前执行cd

with graph_variable.control_dependcies([c,d]):
	pass

你可能感兴趣的:(tensorflow,深度学习,机器学习)