tf.Variable与tf.get_variable

tensorflow提供了通过变量名称来创建或者获取一个变量的机制。通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量通过参数的形式到处传递。TensorFlow中通过变量名获取变量的机制主要是通过tf.get_variable和tf.variable_scope实现的。 当然,变量也可以通过tf.Varivale来创建。当tf.get_variable用于变量创建时,和tf.Variable的功能基本等价。

#以下两个定义是等价的:

v = tf.get_variable('v', shape=[1], initializer=tf.constant_initializer(1.0))
v = tf.Variable(tf.constant(1.0, shape=[1], name='v')

tf.Variable() 和tf.get_variable()的区别:

tf.Variable() 每次调用都会产生一个新的变量,他会自动检测命名冲突并自行处理,变量名称是一个可选参数,例如:

a1 = tf.Variable(tf.random_normal(shape=[2, 3], mean=0, stddev=1), name='a1')
a2 = tf.Variable(tf.random_normal(shape=[2, 3], mean=0, stddev=1), name='a1')
print(a1.name)
print(a2.name)
print(a1==a2)

运行结果:

f1/a1:0
f1/a1_1:0
False    # a2实际变成了a1_1并且和a1 不是同一个变量

 tf.get_variable()则不同,遇到重命名的变量创建且变量名没有设置成共享变量(所谓的共享是指在同一参数空间下的共享,参数空间名称不一样就不能共享了)时,就会报错变量名称这个参数是必填参数,tf.get_variable()会根据这个参数去创建或者获取变量。tf.Variable:tf.Variable的变量名是一个可选项,通过name=’v’的形式给出

tf.name_scope()

tf.name_scope()主要用于管理图中各种op,而tf.variable_scope()主要用于管理图中变量的名字,这两个函数在大部分情况下是等价的,唯一的区别是tf.get_variable()创建的变量名不受 name_scope 的影响(不受它的约束):

首先是tf.variable_scope:

with tf.variable_scope('foo'):a = tf.get_variable('bar',[1])print(a.name)#结果为foo/bar:0

再看tf.name_scope:

with tf.name_scope('a'):a=tf.Variable([1])print(a.name)#结果为a/Variable:0b=tf.get_variable('b',[1])print(b.name)#结果为b:0

看到,tf.get_variable创建的变量并不是a/b:0,而是b:0。这就表示了在tf.name_scope函数下,tf.get_variable不受其约束

tf.get_variable与tf.variable_scope

TensorFlow中通过变量名获取变量的机制主要是通过tf.get_variable和tf.variable_scope实现的。在这里主要解释下reuse问题:当reuse为False或者None时(这也是默认值),tf.get_variable()函数只能创建新的变量同一个tf.variable_scope下面的变量名不能相同,当同名变量已经存在时,函数就报错;当reuse为True时,tf.variable_scope只能获取已经创建过的变量,即该空间下的所有tf.get_variable()函数将直接获取已经创建的变量,如果参数不存在tf.get_variable()函数将会报错。

当 reuse为False时,下面会报错:

with tf.variable_scope('foo'):v = tf.get_variable('v',[1],initializer=tf.constant_initializer(1.0))with tf.variable_scope('foo'):v1 = tf.get_variable('v',[1])

其原因就是在命名空间foo中创建了相同的变量。如果我要在foo下创建一个变量v1,其name不能是‘v’

只需要将reuse设置为Ture就ok了。将上面第二部分代码修改为:

with tf.variable_scope('foo', reuse=True):v1 = tf.get_variable('v',[1])print(v1.name) 

from:https://blog.csdn.net/qq_22522663/article/details/78729029
from:https://blog.csdn.net/hyxing520/article/details/80889496

tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope相关推荐

  1. tf.variable和tf.get_Variable以及tf.name_scope和tf.variable_scope的区别

    在训练深度网络时,为了减少需要训练参数的个数(比如具有simase结构的LSTM模型).或是多机多卡并行化训练大数据大模型(比如数据并行化)等情况时,往往需要共享变量.另外一方面是当一个深度学习模型变 ...

  2. tf.Variable、tf.get_variable、tf.variable_scope、tf.name_scope、random、initializer

    转自:tensorflow学习笔记(二十三):variable与get_variable TF.VARIABLE.TF.GET_VARIABLE.TF.VARIABLE_SCOPE以及TF.NAME_ ...

  3. TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()

    scope 命名方法 对于一个复杂的 tensorflow 模型会有很多个变量, tf.variable_scope() :提供了简单的命名空间技术以避免冲突: tf.get_variable():从 ...

  4. tf.Variable() 和 tf.get_variable(),tf.name_scope() 和 tf.variable_scope()

    在gpu并行训练网络时,往往需要共享已创建的变量,tensorflow中为了使这些变量名和操作名唯一并且不重复,用了几个函数来应对这种情况.于是就有了tf.Variable(), tf.get_var ...

  5. tensorflow 变量及命名空间 tf.Variable() vs tf.get_variable() tf.name_scope() vs tf.variable_scope()

    tf.Variable() vs tf.get_variable() tf.name_scope() vs tf.variable_scope() 1. 基础功能 1.1 tf.Variable() ...

  6. tf.Variable和 tf.get_variable区别(1)

    tensorflow中有两个关于variable的op,tf.Variable()与tf.get_variable()下面介绍这两个创建变量函数的区别 先来看看这两个函数的参数列表,就不打了,直接截图 ...

  7. TensorFlow学习笔记(一): tf.Variable() 和tf.get_variable()详解

    对于tf.Variable和tf.get_variable,这两个都是在我们训练模型的时候常遇到的函数,我们首先要知道懂得它的语法格式.常用的语法格式的作用以及在实际代码中是如何调用.如何运行的,运行 ...

  8. tensorflow变量共享——VariableScope的reuse模式、tf.get_variable()、tf.Variable() 探索

    文章目录 一.VariableScope的reuse模式的设置 1.1节 1.2节 1.3节 1.4节 1.5节 二.reuse模式对tf.Variable() 的影响 三.reuse模式对tf.ge ...

  9. TensorFlow 学习(一)—— tf get variable vs tf Variable ,tf nam

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! scop ...

  10. tensorflow tf.Variable 的用法

    import tensorflow as tf #导入模块 import numpy as np tf.Variable(3) # 数字输入 <tf.Variable 'Variable:0' ...

最新文章

  1. SBB:长期施肥影响土壤固氮菌的群落装配过程
  2. 23设计模式简介笔记
  3. Erlang OTP学习(3) supervisor
  4. Unable to install breakpoint in Modify compiler options to generate line number attributes
  5. random---伪随机数生成器
  6. excel分类_Excel小技巧61:将输入的数字显示为中文
  7. C语言封顶,我们的大屋顶|阳光方舟2.0--C-HOUSE正式封顶
  8. 01_配置管理和SaltStack概述
  9. logback之使用demo
  10. 批量打印pdf/图片
  11. 撒大飒飒撒大声地撒萨达
  12. 风控模型开发的特征选择与常用数据源介绍
  13. python ar_四种AR的实现方式
  14. SQL中round()函数、Ucase()、Lcase()、as的用法
  15. 工作流之待办事宜消息提醒篇
  16. 【工具】批量修改文件名
  17. 安卓使用http下载文件
  18. 2018小米春招,擦黑板
  19. IRF3808STRRPBF N 通道 75 V 106A MOS 管
  20. css属性 margin right,css margin-right属性怎么用

热门文章

  1. Mac安装masscan【亲测有用】
  2. pythonjam可以画图吗_GitHub - jamfs/pyecharts: Python Echarts Plotting Library
  3. ffmpeg windows环境下配置(VS2010)
  4. Java基础---API概述---常用类(Object类/String类)---equals和==
  5. request和response的中文乱码问题
  6. ubuntu关闭服务需要身份验证
  7. K-means算法应用:图片压缩
  8. coursera_ML_1
  9. Struts2之数据标签(二)
  10. 关于未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值的解决方法...