人工智能之Tensorflow变量作用域

news2024/11/17 21:41:43

在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.4
    wel_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.3
    with 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.4
        with 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.coloradmin.cn/o/1541815.html

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

相关文章

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

STM32学习笔记(3_2)- GPIO输入和C语言

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期介…

idea maven配置

修改maven的路径&#xff08;使用本地的Maven&#xff09;&#xff0c;以及修改settings文件的位置和本地仓库的位置。 -DarchetypeCataloginternal 配置阿里云镜像&#xff08;在setting.xml文件中配置&#xff09; <!-- 配置阿里云 --> <mirror> <id>…

javase day11笔记

第十一天课堂笔记 构造代码块 { } 给 所有对象 共性特点 进行初始化操作 创建对象时在堆区对象中存放实例变量,同时执行构造代码块 执行顺序:静态代码块—>非静态代码块—>构造方法 继承★★★ 将多个类中相同的实例变量和实例方法 , 单独存放到一个类中,成为父类…

政安晨:【深度学习部署】—— TensorFlow Extended(TFX)介绍

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 前言 TensorFlow Extended&#xff08;TFX&a…

代数结构与数理逻辑:3.环

图1 环 14.1 环的定义与性质 环&#xff1a;代数系统 [ R ; ; ∗ ] [R;;*] [R;;∗]&#xff0c;其中&#xff0c;*为定义在 R R R上的二元运算&#xff0c;满足下述条件&#xff0c;对任意 a , b , c ∈ R a,b,c\in R a,b,c∈R, ​ 可结合、交换&#xff0c;且有单位元、逆元…

【Redis教程0x04】详解Redis的4个高级数据类型

引言 在【Redis教程0x03】中&#xff0c;我们介绍了Redis中常用的5种基础数据类型&#xff0c;我们再来回顾一下它们的使用场景&#xff1a; String&#xff1a;存储对象、url、计数、分布式锁&#xff1b;List&#xff1a;消息队列&#xff1b;Hash&#xff1a;存储对象、购…

2024年大模型面试准备(二):LLM容易被忽略的Tokenizer与Embedding

分词和嵌入一直是LM被忽略的一部分。随着各大框架如HF的不断完善&#xff0c;大家对tokenization和embedding的重视程度越来越低&#xff0c;到现在初学者大概只能停留在调用tokenizer.encode这样的程度了。 知其然不知其所以然是很危险的。比如你要调用ChatGPT的接口&#xf…

mysql迁移达梦数据库 Java踩坑合集

达梦数据库踩坑合集 文章目录 安装达梦设置大小写不敏感Spring boot引入达梦驱动&#xff08;两种方式&#xff09;将jar包打入本地maven仓库使用国内maven仓库&#xff08;阿里云镜像&#xff09; 达梦驱动yml配置springboot mybatis-plus整合达梦,如何避免指定数据库名&…

进程和线程,线程实现的几种基本方法

什么是进程&#xff1f; 我们这里学习进程是为了后面的线程做铺垫的。 一个程序运行起来&#xff0c;在操作系统中&#xff0c;就会出现对应的进程。简单的来说&#xff0c;一个进程就是跑起来的应用程序。 在电脑上我们可以通过任务管理器可以看到&#xff0c;跑起来的应用程…

C语言 04 基本数据类型

整数 整数就是不包含小数点的数字&#xff0c;整数包含以下几种类型&#xff1a; short &#xff1a;占用 2 个字节&#xff0c;16 个 bit 位。int&#xff1a;占用 4 个字节&#xff0c;32 个 bit 位&#xff0c;能够表示 -2^32 到 2^32 之间的数字&#xff0c;默认使用这种…

Open CASCADE学习|最小二乘法拟合直线

最小二乘法&#xff0c;又称最小平方法&#xff0c;起源于十八世纪的大航海探索时期&#xff0c;发展于天文领域和航海领域。其历史可以追溯到法国科学家马里勒让德于1805年首次提出这一概念&#xff0c;而1809年&#xff0c;高斯在他的著作《天体运动论》中也提出了最小二乘法…

LangChain核心模块 Model I/O

Model I/O 任何语言模型应用程序的核心元素都是模型。LangChain 为您提供了与任何语言模型交互的构建块。 Models llm 和 chat_model 都是表示特定模型配置的对象。 LLM 对象将字符串作为输入和输出字符串。ChatModel 对象将消息列表作为输入并输出消息。 LLM 返回一个字符…

idea创建angular项目

1.idea创建项目 idea&#xff1a;2023.2.3版本 不做赘述&#xff0c;我这里是创建模块&#xff0c;创建项目的话大同小异 2.创建完成后注意一下红色部分&#xff0c;后期需要 3.进入项目根目录 注意&#xff1a;一定要进入项目根目录&#xff0c;就是我们上面红色方框部分&a…

研华工控机610L学习笔记1:基本了解与认识

今日开始学习一些工控机的基本知识&#xff1a; 目录 目录 1、工控机介绍&#xff1a; 2、研华610L说明书参数了解&#xff1a; 3、基本结构了解&#xff1a; 前面板&#xff1a; 后窗&#xff1a; 4.RS232串口&#xff1a; ​编辑 5、工控机分类&#xff1a; 6、工控上…

第四十五周:文献阅读

目录 摘要 Abstract 文献阅读&#xff1a;基于注意力的双向LSTM和编码器-解码器的水质预测 现有问题 提出方法 创新点 方法论 1、EMD&#xff08;经验模态分解&#xff09; 2、VMD&#xff08;变分模态分解&#xff09; 3、VBAED模型 研究实验 数据集 数据预处理 …

AC和AP wlan使用案例

关于AC和AP的一篇 拓补图&#xff1a; AC1 sysn AC vlan 10int g0/0/1 p l t p t a v 10 port trunk pvid vlan 10 q int g0/0/2 p l t p t a v 10 port trunk pvid vlan 10 q int vlan 10 ip add 192.168.10.1 24 q dhcp enable int vlan 10 dhcp select interface q capwa…

算法打卡day24|回溯法篇04|Leetcode 93.复原IP地址、78.子集、90.子集II

算法题 Leetcode 93.复原IP地址 题目链接:93.复原IP地址 大佬视频讲解&#xff1a;复原IP地址视频讲解 个人思路 这道题和昨天的分割回文串有点类似&#xff0c;但这里是限制了只能分割3次以及分割块的数字大小&#xff0c;根据这些不同的条件用回溯法解决就好啦 解法 回溯…

三.寄存器(内存访问)

1.内存中字的存储 2.并不是所有cpu都支持将数据段送入段寄存器&#xff0c;所以有时候用个别的寄存器先把数据段存储起来&#xff0c;再把该寄存器mov到段寄存器。 3.字的传送 4.栈 5.栈机制 举例说明 6.栈顶超界问题 push超界 pop超界 7.栈段

管理自由,体验简单,使用安全 | 详解威联通全套多用户多权限管理方案【附TS-466C产品介绍】

管理自由&#xff0c;体验简单&#xff0c;使用安全 | 详解威联通全套多用户多权限管理方案【附TS-466C产品介绍】 哈喽小伙伴们好&#xff0c;我是Stark-C~。今天我们来解决一个之前评论区多次被提及的问题--多用户权限管理。 对于我们NAS用户来说&#xff0c;基本都会面临这…