Tensorflow |(4)名称域、图 和会话

简介: Tensorflow |(4)名称域、图 和会话

Tensorflow |(1)初识Tensorflow


Tensorflow |(2)张量的阶和数据类型及张量操作


Tensorflow |(3)变量的的创建、初始化、保存和加载


Tensorflow |(4)名称域、图 和会话


变量作用域

tensorflow提供了变量作用域和共享变量这样的概念,有几个重要的作用。


让模型代码更加清晰,作用分明

变量作用域域

通过tf.variable_scope()创建指定名字的变量作用域

with tf.variable_scope("itcast") as scope:
  print("----")

加上with语句就可以在整个itcast变量作用域下就行操作。

嵌套使用

变量作用域可以嵌套使用

with tf.variable_scope("itcast") as itcast:
    with tf.variable_scope("python") as python:
      print("----")

变量作用域下的变量

在同一个变量作用域下,如果定义了两个相同名称的变量(这里先用tf.Variable())会怎么样呢?

with tf.variable_scope("itcast") as scope:
    a = tf.Variable([1.0,2.0],name="a")
    b = tf.Variable([2.0,3.0],name="a")

我们通过tensoflow提供的计算图界面观察

image.png

我们发现取了同样的名字,其实tensorflow并没有当作同一个,而是另外又增加了一个a_1,来表示b的图

变量范围

当每次在一个变量作用域中创建变量的时候,会在变量的name前面加上变量作用域的名称

with tf.variable_scope("itcast"):
    a = tf.Variable(1.0,name="a")
    b = tf.get_variable("b", [1])
    print(a.name,b.name)

得道结果

(u'itcast/a:0', u'itcast/b:0')

对于嵌套的变量作用域来说

with tf.variable_scope("itcast"):
    with tf.variable_scope("python"):
        python3 = tf.get_variable("python3", [1])
assert python3.name == "itcast/python/python3:0"
var2 = tf.get_variable("var",[3,4],initializer=tf.constant_initializer(0.0))

图与会话

tf.Graph

TensorFlow计算,表示为数据流图。一个图包含一组表示 tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象。默认Graph值始终注册,并可通过调用访问 tf.get_default_graph。

a = tf.constant(1.0)
assert c.graph is tf.get_default_graph()

我们可以发现这两个图是一样的。那么如何创建一个图呢,通过tf.Graph()

g1= tf.Graph()
g2= tf.Graph()
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(g1,g2,tf.get_default_graph())

图的其它属性和方法

作为一个图的类,自然会有一些图的属性和方法。


as_default()


返回一个上下文管理器,使其成为Graph默认图形。


如果要在同一过程中创建多个图形,则应使用此方法。为了方便起见,提供了一个全局默认图形,如果不明确地创建一个新的图形,所有操作都将添加到此图形中。使用该with关键字的方法来指定在块的范围内创建的操作应添加到此图形中。

g = tf.Graph()
with g.as_default():
  a = tf.constant(1.0)
  assert c.graph is g

会话

tf.Session

运行TensorFlow操作图的类,一个包含ops执行和tensor被评估

a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
sess = tf.Session()
print(sess.run(c))

在开启会话的时候指定图

with tf.Session(graph=g) as sess:


资源释放

会话可能拥有很多资源,如 tf.Variable,tf.QueueBase和tf.ReaderBase。在不再需要这些资源时,重要的是释放这些资源。要做到这一点,既可以调用tf.Session.close会话中的方法,也可以使用会话作为上下文管理器。以下两个例子是等效的:

# 使用close手动关闭
sess = tf.Session()
sess.run(...)
sess.close()
# 使用上下文管理器
with tf.Session() as sess:
  sess.run(...)

run方法介绍

run(fetches, feed_dict=None, options=None, run_metadata=None)


运行ops和计算tensor


fetches 可以是单个图形元素,或任意嵌套列表,元组,namedtuple,dict或OrderedDict

feed_dict 允许调用者覆盖图中指定张量的值

如果a,b是其它的类型,比如tensor,同样可以覆盖原先的值

a = tf.placeholder(tf.float32, shape=[])
b = tf.placeholder(tf.float32, shape=[])
c = tf.constant([1,2,3])
with tf.Session() as sess:
    a,b,c = sess.run([a,b,c],feed_dict={a: 1, b: 2,c:[4,5,6]})
    print(a,b,c)

错误


RuntimeError:如果它Session处于无效状态(例如已关闭)。

TypeError:如果fetches或feed_dict键是不合适的类型。

ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。

其它属性和方法

graph


返回本次会话中的图


as_default()


返回使此对象成为默认会话的上下文管理器。


获取当前的默认会话,请使用 tf.get_default_session

c = tf.constant(..)
sess = tf.Session()
with sess.as_default():
  assert tf.get_default_session() is sess
  print(c.eval())

注意: 使用这个上下文管理器并不会在退出的时候关闭会话,还需要手动的去关闭

c = tf.constant(...)
sess = tf.Session()
with sess.as_default():
  print(c.eval())
# ...
with sess.as_default():
  print(c.eval())
sess.close()
目录
相关文章
|
6月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow核心组件详解:张量、图与会话
【4月更文挑战第17天】TensorFlow的核心是张量、计算图和会话。张量是基本数据单元,表示任意维度数组;计算图描述操作及它们的依赖关系,优化运行效率;会话是执行计算图的环境,负责操作执行和资源管理。在TF 2.x中,Eager Execution模式简化了代码,无需显式创建会话。理解这些组件有助于高效开发深度学习模型。
|
TensorFlow 算法框架/工具
Python-Tensorflow基础(一)-创建图,创建会话
Python-Tensorflow基础(一)-创建图,创建会话
136 0
Python-Tensorflow基础(一)-创建图,创建会话
|
存储 TensorFlow 算法框架/工具
什么是TensorFlow会话?
我已经看到了很多人对 TensorFlow 的 tf.Graph 和 tf.Session 的规则感到困惑。其实很简单: • Graph(图形)定义了计算。但它不计算任何东西,也不包含任何值,它只是定义您在代码中指定的操作。 • Session(会话)允许执行图形或部分图形。它为此分配资源(在一台或多台机器上)并保存中间结果和变量的实际值。
178 0
|
机器学习/深度学习 存储 人工智能
TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了
8 月中旬,谷歌大脑成员 Martin Wicke 在一封公开邮件中宣布,新版本开源框架——TensorFlow 2.0 预览版将在年底之前正式发布。今日,在上海谷歌开发者大会上,机器之心独家了解到一个重大的改变将会把 Eager Execution 变为 TensorFlow 默认的执行模式。这意味着 TensorFlow 如同 PyTorch 那样,由编写静态计算图全面转向了动态计算图。
205 0
TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了
|
算法 C++ Python
Tensorflow源码解析4 -- 图的节点 - Operation
# 1 概述 上文讲述了TensorFlow的核心对象,计算图Graph。Graph包含两大成员,节点和边。节点即为计算算子Operation,边则为计算数据Tensor。由起始节点Source出发,按照Graph的拓扑顺序,依次执行节点的计算,即可完成整图的计算,最后结束于终止节点Sink,并输出计算结果。 本文会对节点Operation进行详细讲解。 # 2 前端节点数据
1402 0
|
算法 TensorFlow 算法框架/工具
Tensorflow源码解析5 -- 图的边 - Tensor
# 1 概述 前文两篇文章分别讲解了TensorFlow核心对象Graph,和Graph的节点Operation。Graph另外一大成员,即为其边Tensor。边用来表示计算的数据,它经过上游节点计算后得到,然后传递给下游节点进行运算。本文讲解Graph的边Tensor,以及TensorFlow中的变量。 # 2 前端边Tensor数据结构 Tensor作为Graph的边
2465 0
|
TensorFlow 算法框架/工具 计算机视觉
|
机器学习/深度学习 人工智能 PyTorch

相关实验场景

更多