gpt4 book ai didi

python - TensorFlow - tf.VariableScope 和 tf.variable_scope 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:25 26 4
gpt4 key购买 nike

在TensorFlow网站上发现两个引用变量范围的链接,一个是tf.variable_scope这是最常用的一个,另一个 tf.VaribleScope .

由于没有给出tf.VariableScope的应用示例,仅阅读文档,无法区分两者是否有区别。尝试通过用 tf.VariableScope 替换 tf.variable_scope 来实现,但出现以下错误(这表明存在一些差异)

Traceback (most recent call last):
File "/home/NER/window_model.py", line 105, in <module>
model = NaiveNERModel(embeddings)
File "/home/NER/window_model.py", line 64, in __init__
pred = self.add_prediction_op(embed)
File "/home/NER/window_model.py", line 82, in add_prediction_op
with tf.VariableScope('Layer1', initializer=tf.contrib.layers.xavier_initializer()):
AttributeError: __enter__

原始可行代码片段

with tf.variable_scope('Layer1', initializer=tf.contrib.layers.xavier_initializer()):
W = tf.get_variable("W", [self.dim * self.window_size, self.dim * self.window_size])
b1 = tf.get_variable("b1", [self.dim * self.window_size])
h = tf.nn.relu(tf.matmul(embed, W) + b1)

最佳答案

tf.VariableScope 是一个实际的范围类,包含 name , initializer , regularizer , partitioner ,以及传播到该范围内定义的变量的许多其他属性。这个类更多的是属性的集合,而不是上下文管理器,所以你不能在 with 中使用它。声明(这就是错误告诉您的内容)。

由于必须首先将作用域压入堆栈顶部(tensorflow 内部类 _VariableStore 负责此操作),然后从堆栈中弹出,因此需要手动实例化 tf.VariableScope既乏味又容易出错。这就是上下文管理器发挥作用的地方。

tf.variable_scope 是一个上下文管理器,可以更轻松地使用变量范围。正如文档所描述的:

A context manager for defining ops that creates variables (layers).

This context manager validates that the (optional) values are from the same graph, ensures that graph is the default graph, and pushes a name scope and a variable scope.

变量的实际工作被委托(delegate)给 tf.VariableScope在后台创建的对象。

关于python - TensorFlow - tf.VariableScope 和 tf.variable_scope 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47257390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com