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

举报
DrugAI 发表于 2021/07/15 01:57:39 2021/07/15
2.1k+ 0 0
【摘要】 Tensorflow |(1)初识Tensorflow Tensorflow |(2)张量的阶和数据类型及张量操作 Tensorflow |(3)变量的的创建、初始化、保存和加载 Tensorflow |(4)名称域、图 和会话 变量作用域 tensorflow提供了变量作用域和共享变量这样的概念,有几个重要的作用。 让模型代码更加清晰,作用分明 变量作用域域 ...

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提供的计算图界面观察

我们发现取了同样的名字,其实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()
  
 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/104346629

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。