tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope
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相关推荐
- tf.variable和tf.get_Variable以及tf.name_scope和tf.variable_scope的区别
在训练深度网络时,为了减少需要训练参数的个数(比如具有simase结构的LSTM模型).或是多机多卡并行化训练大数据大模型(比如数据并行化)等情况时,往往需要共享变量.另外一方面是当一个深度学习模型变 ...
- 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_ ...
- TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()
scope 命名方法 对于一个复杂的 tensorflow 模型会有很多个变量, tf.variable_scope() :提供了简单的命名空间技术以避免冲突: tf.get_variable():从 ...
- tf.Variable() 和 tf.get_variable(),tf.name_scope() 和 tf.variable_scope()
在gpu并行训练网络时,往往需要共享已创建的变量,tensorflow中为了使这些变量名和操作名唯一并且不重复,用了几个函数来应对这种情况.于是就有了tf.Variable(), tf.get_var ...
- 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() ...
- tf.Variable和 tf.get_variable区别(1)
tensorflow中有两个关于variable的op,tf.Variable()与tf.get_variable()下面介绍这两个创建变量函数的区别 先来看看这两个函数的参数列表,就不打了,直接截图 ...
- TensorFlow学习笔记(一): tf.Variable() 和tf.get_variable()详解
对于tf.Variable和tf.get_variable,这两个都是在我们训练模型的时候常遇到的函数,我们首先要知道懂得它的语法格式.常用的语法格式的作用以及在实际代码中是如何调用.如何运行的,运行 ...
- 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 ...
- TensorFlow 学习(一)—— tf get variable vs tf Variable ,tf nam
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! scop ...
- tensorflow tf.Variable 的用法
import tensorflow as tf #导入模块 import numpy as np tf.Variable(3) # 数字输入 <tf.Variable 'Variable:0' ...
最新文章
- SBB:长期施肥影响土壤固氮菌的群落装配过程
- 23设计模式简介笔记
- Erlang OTP学习(3) supervisor
- Unable to install breakpoint in Modify compiler options to generate line number attributes
- random---伪随机数生成器
- excel分类_Excel小技巧61:将输入的数字显示为中文
- C语言封顶,我们的大屋顶|阳光方舟2.0--C-HOUSE正式封顶
- 01_配置管理和SaltStack概述
- logback之使用demo
- 批量打印pdf/图片
- 撒大飒飒撒大声地撒萨达
- 风控模型开发的特征选择与常用数据源介绍
- python ar_四种AR的实现方式
- SQL中round()函数、Ucase()、Lcase()、as的用法
- 工作流之待办事宜消息提醒篇
- 【工具】批量修改文件名
- 安卓使用http下载文件
- 2018小米春招,擦黑板
- IRF3808STRRPBF N 通道 75 V 106A MOS 管
- css属性 margin right,css margin-right属性怎么用
热门文章
- Mac安装masscan【亲测有用】
- pythonjam可以画图吗_GitHub - jamfs/pyecharts: Python Echarts Plotting Library
- ffmpeg windows环境下配置(VS2010)
- Java基础---API概述---常用类(Object类/String类)---equals和==
- request和response的中文乱码问题
- ubuntu关闭服务需要身份验证
- K-means算法应用:图片压缩
- coursera_ML_1
- Struts2之数据标签(二)
- 关于未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值的解决方法...