详解tf.variable_scope函数
原创 https://blog.csdn.net/qq_41058594/article/details/85165025
在学习Tensorflow进阶实例这本书时候出现了tf.variable_scope,当时很蒙圈,现在就来总结一下:
tf.variable_scope函数
variable_scope类
用于定义创建变量(层)的操作的上下文管理器。
此上下文管理器验证(可选)values是否来自同一图形,确保图形是默认的图形,并推送名称范围和变量范围。
如果name_or_scope不是None,则使用as is。如果scope是None,则使用default_name。在这种情况下,如果以前在同一范围内使用过相同的名称,则通过添加_N来使其具有唯一性。
变量范围允许您创建新变量并共享已创建的变量,同时提供检查以防止意外创建或共享。在本文中我们提供了几个基本示例。
示例1-如何创建一个新变量:
with tf.variable_scope("foo"):with tf.variable_scope("bar"):v = tf.get_variable("v", [1])assert v.name == "foo/bar/v:0"
示例2-共享变量AUTO_REUSE:
def foo():with tf.variable_scope("foo", reuse=tf.AUTO_REUSE):v = tf.get_variable("v", [1])return vv1 = foo() # Creates v.
v2 = foo() # Gets the same, existing v.
assert v1 == v2
示例3-使用reuse=True共享变量:
with tf.variable_scope("foo"):v = tf.get_variable("v", [1])
with tf.variable_scope("foo", reuse=True):v1 = tf.get_variable("v", [1])
assert v1 == v
示例4-通过捕获范围并设置重用来共享变量:
with tf.variable_scope("foo") as scope:v = tf.get_variable("v", [1])scope.reuse_variables()v1 = tf.get_variable("v", [1])
assert v1 == v
为了防止意外共享变量,我们在获取非重用范围中的现有变量时引发异常。
with tf.variable_scope("foo"):v = tf.get_variable("v", [1])v1 = tf.get_variable("v", [1])# Raises ValueError("... v already exists ...")
同样,我们在尝试获取重用模式中不存在的变量时引发异常。
with tf.variable_scope("foo", reuse=True):v = tf.get_variable("v", [1])# Raises ValueError("... v does not exists ...")
请注意,reuse(重用)标志是有继承性的:如果我们打开一个重用范围,那么它的所有子范围也会重用。
关于名称范围的说明:设置reuse不会影响其他操作(如多重)的命名。
请注意,1.0版本开始(包含)允许(虽然明确劝阻)将False传递给重用参数,从而产生与None无关的未记录行为。从1.1.0版本开始传递None和False作为重用具有完全相同的效果。
方法
init
__init__(name_or_scope,default_name=None,values=None,initializer=None,regularizer=None,caching_device=None,partitioner=None,custom_getter=None,reuse=None,dtype=None,use_resource=None,constraint=None,auxiliary_name_scope=True
)
用于初始化上下文管理器。
参数:
- name_or_scope:string或者VariableScope表示打开的范围。
- default_name:如果name_or_scope参数为None,则使用默认的名称,该名称将是唯一的;如果提供了name_or_scope,它将不会被使用,因此它不是必需的,并且可以是None。
- values:传递给操作函数的Tensor参数列表。
- initializer:此范围内变量的默认初始值设定项。
- regularizer:此范围内变量的默认正规化器。
- caching_device:此范围内变量的默认缓存设备。
- partitioner:此范围内变量的默认分区程序。
- custom_getter:此范围内的变量的默认自定义吸气。
- reuse:可以是True、None或tf.AUTO_REUSE;如果是True,则我们进入此范围的重用模式以及所有子范围;如果是tf.AUTO_REUSE,则我们创建变量(如果它们不存在),否则返回它们;如果是None,则我们继承父范围的重用标志。当启用紧急执行时,该参数总是被强制为tf.AUTO_REUSE。
dtype:在此范围中创建的变量类型(默认为传入范围中的类型,或从父范围继承)。 - use_resource:如果为false,则所有变量都将是常规变量;如果为true,则将使用具有明确定义的语义的实验性
ResourceVariables。默认为false(稍后将更改为true)。当启用紧急执行时,该参数总是被强制为true。 - constraint:一个可选的投影函数,在被Optimizer(例如用于实现层权重的范数约束或值约束)更新之后应用于该变量。该函数必须将代表变量值的未投影张量作为输入,并返回投影值的张量(它必须具有相同的形状)。进行异步分布式培训时,约束条件的使用是不安全的。
- auxiliary_name_scope:如果为True,则我们用范围创建一个辅助名称范围;如果为False,则我们不接触名称范围。
返回值:
返回可以捕获和重用的范围。
可能引发的异常:
- ValueError:在创建范围内尝试重用时,或在重用范围内创建时。
- TypeError:某些参数的类型不合适时。
enter
__enter__()
__exit__
__exit__(type_arg,value_arg,traceback_arg
)
想要查找Tensorflow中的其他函数请参考:
详解tf.variable_scope函数相关推荐
- php output详解,PHP输出缓冲控制Output Control系列函数详解,output函数详解
PHP输出缓冲控制Output Control系列函数详解,output函数详解 概述 以前研究过PHP的输入输出缓冲,不过博客搬家以后,原来文章找不到了,今天看到一篇好文,顺便转载过来. 简介 说到 ...
- map函数的用法python,详解Python map函数及Python map()函数的用法
python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...
- 你是真的“C”——详解C语言函数模块知识(上篇)
详解C语言函数模块知识(上篇)
- MaxCompute SQL函数详解 ODPS SQL函数详解---之日期相关函数
MaxCompute SQL函数详解 ODPS SQL函数详解 日期函数 to_date函数 返回类型:datetime 语法:to_date(类型 参数1,类型 参数2);to_date(strin ...
- concat拼接的坑 mysql_详解MySQL拼接函数CONCAT的使用心得
这篇文章我们来讲一下在网站建设中,详解MySQL拼接函数CONCAT的使用心得.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 前几篇文章给大家介绍了MySQL中的替换函数( ...
- MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数
MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数 MaxCompute/ODPS SQL常用数学运算相关函数 ABS函数-计算绝对值 sql:select A ...
- pandas数据清洗:drop函数案例详解、dropna函数案例详解、drop_duplicates函数案例详解
pandas数据清洗:drop函数.dropna函数.drop_duplicates函数详解 1 drop函数简介 1.1 构建学习数据 1.2 删除行两种方法 1.3 删除列两种方法 2 dropn ...
- 详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示
详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示 目录 01-详解函数imread():读取图像文件 02-详解函数imshow():显示图像 03-使用 ...
- python while函数_详解python while 函数及while和for的区别
1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...
最新文章
- rhel5+nis+autofs+nfs
- vc2005编译过程中没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题? 的彻底解决
- 用 Ruby 买卖Bitcoin: 闪兑交易所 Exincore
- MYSQL之sql优化——慢查询日志
- 【蓝桥杯官网试题 - 基础练习】 矩形面积交 (几何)
- 包含天,时,分,秒的倒计时
- PyQt5学习笔记06----Qt Designer自定义信号emit及传参
- Vue关于axios跨域问题的解决
- linux DISPLAY变量
- python pcl_windows 10 环境pcl-python 安装
- php依赖安装顺序,PHP安装GD依赖
- 自由曲面透镜设计matlab,实现LED台灯均匀照明的自由曲面透镜仿真设计
- java实现pdf黑白化 : pdf转图片、图片黑白化、图片转pdf
- 学计算机拼音不好怎么办,孩子拼音基础差怎么办?告诉你学拼音技巧!
- SDN之旅—mininet(在Windows系统上)安装
- 台式计算机没办法连接wifi吗,台式机连接wifi不能用怎么办
- python树莓派串口通信实例_使用树莓派和Python实现ModbusTCP通讯
- 如何修复Outlook已发送邮件丢失的问题
- Java实现微信小程序支付(支付,提现,退款)
- STM32使用RL_TCPNET网络协议栈的开发