人工智能之Tensorflow变量作用域

在TensoFlow中有两个作用域(Scope),一个时name_scope ,另一个是variable_scope。variable_scope主要给variable_name加前缀,也可以给op_name加前缀;name_scope给op_name加前缀。

variable_scope

通过所给的名字创建或返回一个变量,并为变量指定命名空间,在Tensorflow 1.0版本示例代码如下:

var=tf.compat.v1.get_variable(name,shape,dtype,initializer) 通过所给的的名字name创建或返回一个变量
tf.compat.v1.variable_scope(<scope_name>)   为变量指定命名空间

tf.compat.v1.get_variable_scope().resuse==False时,variable_scope作用域只能用于创建新变量,示例代码如下:

with tf.compat.v1.variable_scope("foo"):var1=tf.compat.v1.get_variable("var",[1])var2=tf.compat.v1.get_variable("var",[1])
assert var1.name=="foo/var:0"

在这里插入图片描述
导致上述程序的错误原因是:
ValueError: Variable foo/var already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?

变量foo/var已经存在了,但tf.compat.v1.get_variable_scope().resuse默认为False,所以不能重用。
tf.compat.v1.get_variable_scope().resuse==True时,作用域可以共享变量。示例代码如下:

with tf.compat.v1.variable_scope("foo") as scope:var1=tf.compat.v1.get_variable("var4",[1])
with tf.compat.v1.variable_scope("foo",reuse=True):var2=tf.compat.v1.get_variable("var4",[1])
assert var1==var2

在这里插入图片描述
如果在开启的一个变量作用域里使用之前预先定义的一个作用域,则会跳过当前变量的作用域,保持预先存在的作用域不变,示例如下:

with tf.compat.v1.variable_scope("foo") as foo_scope:assert foo_scope.name=="foo"
with tf.compat.v1.variable_scope("wel") as wel_scope:with tf.compat.v1.variable_scope("we0") as we0_scope:assert we0_scope.name=="wel/we0"with tf.compat.v1.variable_scope(foo_scope) as foo_scope2:assert foo_scope2.name=="foo"
foo_scope2.name

在这里插入图片描述
变量作用域可以默认携带一个初始化器,在这个作用域中的子作用域或变量都可以继承或者重写父作用域初始化中的值,示例代码如下:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()
with tf.compat.v1.variable_scope("foo",initializer=tf.compat.v1.constant_initializer(0.4)) :wel_1=tf.compat.v1.get_variable("wel",[1])with tf.compat.v1.Session() as sess:sess.run(tf.compat.v1.global_variables_initializer())assert wel_1.eval()==0.4wel_2=tf.compat.v1.get_variable("wel2",[1], initializer=tf.constant_initializer(0.3))with tf.compat.v1.Session() as sess:sess.run(tf.compat.v1.global_variables_initializer())assert wel_2.eval()==0.3with tf.compat.v1.variable_scope("two"):wel_1=tf.compat.v1.get_variable("wel",[1])with tf.compat.v1.Session() as sess:sess.run(tf.compat.v1.global_variables_initializer())assert wel_1.eval()==0.4with tf.compat.v1.variable_scope("three",initializer=tf.constant_initializer(0.2)):wel_1=tf.compat.v1.get_variable("wel",[1])with tf.compat.v1.Session() as sess:sess.run(tf.compat.v1.global_variables_initializer())assert wel_1.eval(session = sess)==0.2

在这里插入图片描述
把最后一个断言值调整错误,验证程序执行情况:
在这里插入图片描述
对于op_name,在variable_scope作用域下的操作,也会被加上前缀,示例代码如下:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()
with tf.compat.v1.variable_scope("four"):wel_x=1.0+tf.compat.v1.get_variable("wel",[1])assert wel_x.op.name=="four/add"

在这里插入图片描述

name_scope

TensorFlow中节点数非常多,在可视化的过程中很难全部展示出来,常 name_scope作为变量划分范围,在可视化中,这表示计算图中的一个层级。name_scope会影响op_name,但 不会影响get_variable()创建的变量,而会影响通过Variable()创建的变量,示例代码如下:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()
with tf.compat.v1.variable_scope("five"):with tf.compat.v1.name_scope("one"):wel_x=tf.compat.v1.get_variable("wel",[1])var1=tf.Variable(tf.zeros([1]),name='var1')ops=1.0+ var1
assert wel_x.name=="five/wel:0"        
assert var1.name=="five/one/var1:0"     
assert ops.op.name=="five/one/add"

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/768378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable diffusion(四)

训练自己的Lora 【DataSet】【Lora trainer】【SD Lora trainer】 前置的知识 batch size&#xff1a;模型一次性处理几张图片。一次性多处理图片&#xff0c;模型能够综合捕捉多张图片的特征&#xff0c;最终的成品效果可能会好。但是处理多个batch size也意味着更大的显存…

nvm更换node.js的版本

自行下载nvm 打开cmd 1. nvm ls 列出目前已经下载的node版本&#xff0c;和正在使用的node版本 2. nvm install v版本号 下载某个版本 3. nvm uninstall v版本号 卸载某个版本 4. nvm use 版本号 切换到某个版本

深入理解栈和队列(二):队列

个人主页&#xff1a;17_Kevin-CSDN博客 专栏&#xff1a;《数据结构》 一、队列的概念和结构 队列是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的…

吴恩达2022机器学习专项课程(一) 3.5 可视化成本函数

问题预览 为什么要可视化成本函数&#xff1f;可视化之后的成本函数是什么样子&#xff1f;如何在三维空间里通过w和b找到一个成本函数的值&#xff1f;如何在三维空间里找到成本函数的最小值&#xff1f; 解读 可视化成本函数&#xff1a;为了更加方便的看到不同的w和b&…

AI:152- 利用深度学习进行手势识别与控制

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一. 利用深度学习进行手势识别与控制 …

Acrobat Pro DC ----专业PDF编辑与管理

Acrobat Pro DC 2023是一款功能强大的PDF处理软件&#xff0c;它提供了丰富的编辑工具&#xff0c;支持创建、编辑、合并、分割PDF文件&#xff0c;以及高质量的PDF到其他格式的转换功能。同时&#xff0c;该软件集成了最新的OCR技术&#xff0c;可将扫描文档或图片转换成可编辑…

转座子插入位点分析4------PS转座子测序数据分析

观察数据 这是经公司使用fastp质控后的数据&#xff0c;我们先挑选部分数据进行比对&#xff0c;观察序列结构 为了准确性&#xff0c;我们再次挑选另一批数据进行比对 可以看到&#xff0c;所有序列都存在一个“GTGTCAAATACTTATTTTCCCCGCTGTA”的前导序列&#xff0c;这可能…

uniapp页面嵌套其他页面的实现

功能: 类似于一个drawer&#xff0c;当主页面加载的时候会一并加载url对应的组件&#xff0c;当点击后以drawer形式显示组件里面的内容&#xff0c;可动画。 <navigator url"/pages/my/components/personalMessage" slot"right"><view><di…

Java螺旋折线

题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点 (X,Y)&#xff0c;我们定义它到原点的距离dis(X,Y) 是从原点到 (X,Y) 的螺旋折线段的长度。 例如 dis(0,1)3&#xff0c;dis(−2,−1)9。 给出整点坐标 (X,Y)&#xff0c;你能计算出 dis(X,Y) 吗&#xf…

GO-初识包管理

初识包管理&#xff0c;知道项目中文件和文件夹之间的关系 输出&#xff0c;代码&#xff0c;在go编译器运行时会显示在屏幕中 初识数据类型 整型&#xff0c;数字。例如&#xff1a;1、2、3、4 字符串类型&#xff0c;表示文本信息的。例如:“张三”“李四” 布尔类型&#x…

图解Kafka架构学习笔记(三)

准备Kafka环境 这里推荐使用Docker Compose快速搭建一套本地开发环境。 以下docker-compose.yml文件用来搭建一套单节点zookeeper和单节点kafka环境&#xff0c;并且在8080端口提供kafka-ui管理界面。 version: 2.1services:zoo1:image: confluentinc/cp-zookeeper:7.3.2hos…

FPGA 以太网传输ov5640视频

1 实验任务 使用 DFZU4EV MPSoC 开发板及双目 OV5640 摄像头其中一个摄像头实现图像采集&#xff0c;并通过开发板上的以太网接口发送给上位机实时显示。 2 系统框架 时钟模块用于为 I2C 驱动模块、以太网顶层模块和开始传输控制模块提供驱动时钟&#xff1b;I2C 驱动模块…

Python Flask 自定义错误页面

新建templates/404.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <img src"../static/a123.png" alt"" width"…

基于spring boot的个人博客系统的设计与实现(带源码)

随着国内市场经济这几十年来的蓬勃发展&#xff0c;突然遇到了从国外传入国内的互联网技术&#xff0c;互联网产业从开始的群众不信任&#xff0c;到现在的离不开&#xff0c;中间经历了很多挫折。本次开发的个人博客系统&#xff0c;有管理员&#xff0c;用户&#xff0c;博主…

使能 Linux 内核自带的 FlexCAN 驱动

一. 简介 前面一篇文章学习了 ALPHA开发板修改CAN的设备树节点信息&#xff0c;并加载测试过设备树文件&#xff0c;文件如下&#xff1a; ALPHA开发板修改CAN的设备树节点信息-CSDN博客 本文是学习使能 IMX6ULL的 CAN驱动&#xff0c;也就是通过内核配置来实现。 二. 使能…

【数据结构】归并排序(用递归)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解归并排序&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 基本思想二. 归并排序代码 一. 基本思想 在讲归并排序之前&#xff0c;问问自己&#x…

3月份的倒数第二个周末有感

坐在图书馆的那一刻&#xff0c;忽然感觉时间的节奏开始放缓。今天周末因为我们两都有任务需要完成&#xff0c;所以就选了嘉定图书馆&#xff0c;不得不说嘉定新城远香湖附近的图书馆真的很有感觉。然我不经意回想起学校的时光&#xff0c;那是多么美好且短暂的时光。凝视着窗…

LeetCode 热题 100 | 堆(三)

目录 1 队列 - v2.0 2 295. 数据流的中位数 2.1 解题思路 2.2 举例说明 2.3 维持队列 2.4 求中位数 2.5 完整代码 菜鸟做题&#xff0c;语言是 C 1 队列 - v2.0 排序规则果然和名字是反过来的&#xff1a; // 大根堆 priority_queue<int, vector<int>…

信号处理与分析——matlab记录

一、绘制信号分析频谱 1.代码 % 生成测试信号 Fs 3000; % 采样频率 t 0:1/Fs:1-1/Fs; % 时间向量 x1 1*sin(2*pi*50*t) 1*sin(2*pi*60*t); % 信号1 x2 1*sin(2*pi*150*t)1*sin(2*pi*270*t); % 信号2% 绘制信号图 subplot(2,2,1); plot(t,x1); title(信号x1 1*sin(…

Kotlin的lateinit关键词

Kotlin的lateinit关键词 lateinit&#xff0c;延迟初始化。有时&#xff0c;并不能定义一个变量或对象值为空&#xff0c;而也没办法在对象或变量在定义声明时就为它赋值初始化&#xff0c;那么这时就需要用到Kotlin提供的延迟初始化lateinit。比如&#xff0c;有些依赖注入框架…