当前位置: 首页 > news >正文

tensorflow中的共享变量

(1)用途

在构建模型时,需要使用tf.Variable来创建一个变量(也可以理解成节点)。但在某种情况下,一个模型需要使用其他模型创建的变量,两个模型一起训练。此时需要用到共享变量。这时就是通过引入get_variable方法,实现共享变量来解决这个问题。

(2) 使用get-variable获取变量

get_variable一般会配合variable_scope一起使用,以实现共享变量。variable_scope的意思是变量作用域。在某一作用域中的变量可以被设置成共享的方式,被其他网络模型使用。
get_variable函数的定义如下

    tf.get_variable(<name>, <shape>, <initializer>)

注意:
使用get_variable生成的变量是以指定的name属性为唯一标识,并不是定义的变量名称。使用时一般通过name属性定位到具体变量,并将其共享到其他模型中。

(3) get_variable和Variable的区别

Variable

import tensorflow as tf
x=tf.Variable(1.0,name="v1")
print(x,"x的名字为:",x.name)
x2=tf.Variable(2.0,name="v2")
print(x2,"x2的名字为:",x2.name)
with tf.Session() as sess:all_v=tf.global_variables_initializer()sess.run(all_v)print("X1=",x.eval()) #获取值print("X2=",x2.value()) #获取全部信息

注意:

Variable定义时没有指定名字,系统会自动给加上一个名字Variable:0。
当Variable定义多个相同的变量时,图只会当最后一个有效

get_variable

    16   get_var1 = tf.get_variable("firstvar", [1], initializer=tf.constant_initializer(0.3))17   print ("get_var1:", get_var1.name)18# 此时会出错,firstvar在前面已经定义,如果改为firstvar2则正常19   get_var1 = tf.get_variable("firstvar", [1], initializer=tf.constant_initializer(0.4))20   print ("get_var1:", get_var1.name)

(4)在特定的作用域下获取变量

在作用域下,使用get_variable,以及嵌套variable_scope。在前面的例子中已经知道使用get_variable创建两个同样名字的变量是行不通的,如果真的想要那么做,可以使用variable_scope将它们隔开,代码如下。

    import tensorflow as tfwith tf.variable_scope("test1", ):     #定义一个作用域test1var1 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)with tf.variable_scope("test2"):var2 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)print ("var1:", var1.name)print ("var2:", var2.name)

其实,variable_scope里面有个reuse=True属性,表示使用已经定义过的变量。这时get_variable将不会再创建新的变量,而是去图(一个计算任务)中get_variable所创建过的变量中找与name相同的变量。

    11   with tf.variable_scope("test1", reuse=True ):12        var3= tf.get_variable("firstvar", shape=[2], dtype=tf.float32)13        with tf.variable_scope("test2"):14            var4 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)1516   print ("var3:", var3.name)17   print ("var4:", var4.name)
http://www.lryc.cn/news/62816.html

相关文章:

  • flink cep数据源keyby union后 keybe失效
  • python中的继承与多态,dir()函数
  • C++练级之初级:第五篇
  • JMeter的使用(二)
  • C/C++文件操作/IO流
  • 推荐 7 个超牛的 Spring Cloud 实战项目
  • Linux信号:信号 信号集 信号集函数
  • 详解八大排序算法-附动图和源码(插入,希尔,选择,堆排序,冒泡,快速,归并,计数)
  • 网络编程--协议、协议族、地址族
  • Linux入门操作
  • 1。C语言基础知识回顾
  • 学习如何通过构建一个简单的JavaScript颜色游戏来操作DOM
  • 【算法学习】—n皇后问题(回溯法)
  • 万亿OTA市场进入新爆发期,2025或迎中国汽车软件付费元年
  • Android硬件通信之 蓝牙Mesh通信
  • PG数据库实现bool自动转smallint的方式
  • 易观千帆 | 2023年3月证券APP月活跃用户规模盘点
  • 2023年江苏专转本成绩查询步骤
  • JavaScript中sort()函数
  • 泰克Tektronix DPO5204B混合信号示波器
  • 突破传统监测模式:业务状态监控HM的新思路
  • 0Ω电阻在PCB板中的5大常见作用
  • 分布式消息队列Kafka(三)- 服务节点Broker
  • 蠕动泵说明书_RDB
  • 浅谈react如何自定义hooks
  • 如何优雅的写个try catch的方式!
  • 海尔智家:智慧场景掌握「主动」权,用户体验才有话语权
  • 基于铜锁,在前端对登录密码进行加密,实现隐私数据保密性
  • LVS的小总结
  • Spring依赖注入(DI配置)