zoukankan      html  css  js  c++  java
  • 2018-07-02

    1. tf.Variable与tf.get_variable

    tensorflow提供了通过变量名称来创建或者获取一个变量的机制。通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量通过参数的形式到处传递。

    TensorFlow中通过变量名获取变量的机制主要是通过tf.get_variable和tf.variable_scope实现的。

    当然,变量也可以通过tf.Varivale来创建。当tf.get_variable用于变量创建时,和tf.Variable的功能基本等价


    6887927-476c7aee5eca5807.png


    tf.get_varialbe和tf.Variable最大的区别在于:tf.Variable的变量名是一个可选项,通过name=’v’的形式给出。但是tf.get_variable必须指定变量名。  


    2. tf.get_variable与tf.variable_scope

    上面已经提到过了:TensorFlow中通过变量名获取变量的机制主要是通过tf.get_variable和tf.variable_scope实现的。在这里,我主要解释下大家深恶痛绝的reuse问题

    其实只要记住一件事情就ok了:当reuse为False或者None时(这也是默认值),同一个tf.variable_scope下面的变量名不能相同;当reuse为True时,tf.variable_scope只能获取已经创建过的变量。

    下面我们通过代码来看下:


    6887927-607f2578272c51a5.png


    在这种情况下会报错:Variable foo/v already exists, disallowed.Did you mean to set reuse=True in Varscope?

    其原因就是在命名空间foo中创建了相同的变量。如果我要在foo下创建一个变量v1,其name=‘v’,只需要将reuse设置为Ture就ok了。将上面第二部分代码修改为:


    6887927-1bd5dc56f8ca766c.png

    当reuse已经设置为True时,tf.variable_scope只能获取已经创建过的变量。这个时候,在命名空间bar中创建name=‘v’的变量v3,将会报错:Variable

    bar/v dose not exists, diallowed. Did you mean to set reuse=None in VarScope?


    6887927-3bd3baace5ffd943.png

    简而言之,reuse=False时,tf.variable_scope创建变量;reuse=True时,tf.variable_scope获取变量

    3. tf.variable_scope与tf.name_scope

    除了tf.variable_scope,tf.name_scope函数也提供了命名空间管理的功能。这两个函数在大部分情况下是等价的,唯一的区别是在使用tf.get_variable函数时。

    tf.get_variable函数不受tf.name_scope的影响

    我们从代码看下这句话的具体意思。

    首先是tf.variable_scope:


    6887927-a7c2b88c501c523c.png

    再看tf.name_scope:


    6887927-e210fe34b9d433c2.png

    从这个结果中,我们能很清晰地看到,tf.get_variable创建的变量并不是a/b:0,而是b:0。这就表示了在tf.name_scope函数下,tf.get_variable不受其约束

    天上我才必有用,千金散尽还复来!
  • 相关阅读:
    linux学习8 运维基本功-Linux获取命令使用帮助详解
    持续集成学习11 jenkins和gitlab集成自动触发
    持续集成学习10 Pipline初探
    持续集成学习9 jenkins执行脚本
    持续集成学习8 jenkins权限控制
    持续集成学习7 jenkins自动化代码构建
    持续集成学习6 jenkins自动化代码构建
    持续集成学习5 jenkins自动化测试与构建
    持续集成学习4 jenkins常见功能
    【Hadoop离线基础总结】MapReduce增强(下)
  • 原文地址:https://www.cnblogs.com/lutaishi/p/13436337.html
Copyright © 2011-2022 走看看