tf.variable_scope()和tf.name_scope()
分类:
TensorFlow
1.tf.variable_scope
功能:tf.variable_scope可以让不同命名空间中的变量取相同的名字,无论tf.get_variable
或者tf.Variable
生成的变量
TensorFlow链接:https://tensorflow.google.cn/api_docs/python/tf/variable_scope?hl=en
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | with tf.variable_scope( 'V1' ): a1 = tf.get_variable(name = 'a1' , shape = [ 1 ], initializer = tf.constant_initializer( 1 )) a2 = tf.Variable(tf.random_normal(shape = [ 2 , 3 ], mean = 0 , stddev = 1 ), name = 'a2' ) with tf.variable_scope( 'V2' ): a3 = tf.get_variable(name = 'a1' , shape = [ 1 ], initializer = tf.constant_initializer( 1 )) a4 = tf.Variable(tf.random_normal(shape = [ 2 , 3 ], mean = 0 , stddev = 1 ), name = 'a2' ) with tf.Session() as sess: sess.run(tf.initialize_all_variables()) print (a1.name) print (a2.name) print (a3.name) print (a4.name) |
1 2 3 4 5 | 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 #不报错 |
如果想要重用变量,可以设置reuse_variables()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import numpy as np with tf.variable_scope( 'V1' ): a1 = tf.get_variable(name = 'a1' , shape = [ 1 ], initializer = tf.constant_initializer( 1 )) a2 = tf.Variable(tf.random_normal(shape = [ 2 , 3 ], mean = 0 , stddev = 1 ), name = 'a2' ) tf.get_variable_scope().reuse_variables() assert tf.get_variable_scope().reuse = = True a3 = tf.get_variable(name = 'a1' , shape = [ 1 ], initializer = tf.constant_initializer( 1 )) a4 = tf.Variable(tf.random_normal(shape = [ 2 , 3 ], mean = 0 , stddev = 1 ), name = 'a2' ) with tf.variable_scope( 'V1' ,reuse = True ): a5 = tf.get_variable(name = 'a1' , shape = [ 1 ], initializer = tf.constant_initializer( 1 )) with tf.Session() as sess: sess.run(tf.initialize_all_variables()) print (a1.name) print (a2.name) print (a3.name) print (a4.name) print (a5.name) |
variable重名,虽然name设置的一样,但是实际是不共享同一个变量的;get_variable重name,其实是共享的同一个变量。
2.tf.name_scope
功能:tf.name_scope具有类似的功能,但只限于tf.Variable生成的变量
TensorFlow链接:https://tensorflow.google.cn/api_docs/python/tf/name_scope?hl=en
1 2 3 4 5 6 7 8 9 10 11 12 13 | with tf.name_scope( 'V1' ): a1 = tf.get_variable(name = 'a1' , shape = [ 1 ], initializer = tf.constant_initializer( 1 )) a2 = tf.Variable(tf.random_normal(shape = [ 2 , 3 ], mean = 0 , stddev = 1 ), name = 'a2' ) with tf.name_scope( 'V2' ): a3 = tf.get_variable(name = 'a1' , shape = [ 1 ], initializer = tf.constant_initializer( 1 )) a4 = tf.Variable(tf.random_normal(shape = [ 2 , 3 ], mean = 0 , stddev = 1 ), name = 'a2' ) with tf.Session() as sess: sess.run(tf.initialize_all_variables()) print (a1.name) print (a2.name) print (a3.name) print (a4.name) |
a1,a3会报错:ValueError: Variable a1 already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:
参考文献:
【1】tf.variable_scope和tf.name_scope的用法
【2】参数共享:https://jasdeep06.github.io/posts/variable-sharing-in-tensorflow/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现