有一些具有相同架构的常见层,我想分别训练它们。我的代码显示出来了,我担心我的代码会精确地构建和训练一个模型而不是两个模型。实际上,我想分别训练两个common
图层,并获得两个不同权重的common
图层。
我的代码是对的吗?或者我应该怎么做?
def common():
# some layers
pass
out1 = common(input)
out2 = common(input)
loss1
loss2
...
答案 0 :(得分:1)
简短的回答是:如果你没有特别要求tensorflow重用变量(例如tf.variable_scope(scope, reuse=True)
),那么每次都会创建新的变量。
以下是关于此主题的广泛documentation,包括"共享变量"部分。
回复以下评论:有一堆可变范围。最重要的一个(最近的跟踪)将占上风。不允许您通过reuse
选项的接口在此顶部变量范围中明确查看。这样做的接口可以在执行期间有效地创建一个variable_scope。
如果您尝试创建两个具有相同名称的变量,那么为您创建的top变量范围将会失败。
a = tf.get_variable("v", [1])
b = tf.get_variable("v", [1])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<...>
ValueError: Variable v already exists, disallowed.
Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? ...