我问过类似的问题here https://stackoverflow.com/questions/42018010/copy-tensorflow-contrib-layers?noredirect=1#comment71210552_42018010.
然而,答案并不能满足我的需要,而且没有人回复我的评论,所以我必须重新发布问题并使其更清楚。
我有 2 个网络,称为目标网络和源网络。为了简单起见,网络定义如下:
# Definition for Source
s_input = tf.placeholder(tf.float32, [None, 1], name='input_layer')
s_output = tf.contrib.layers.fully_connected(input=s_input, num_outputs=1)
# Structure of target is the same as Source's with t_input & t_output.
# Loss
loss = (alpha*t_output - s_input + beta*label)**2
opt = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss)
现在,经过一些训练步骤后,我想复制图层的内容(参数)s_output
分层t_output
以便t_output
不会改变为s_output
由于梯度下降而改变&t_output
仍然得到输入t_input
.
我已经尝试过雅罗斯拉夫·布拉托夫建议的解决方案,但它不起作用。
如果我简单地定义我的网络tf.Variable
,我可以轻松地复制变量tf.assign
,但现在我想用tf.contrib.layers
这更加简单和灵活,足以定义我自己的网络。
如果有人不明白我的问题,请通知我,以便我解决它。
您好,您可以使用分配来创建复制操作,例如
s_output = tf.contrib.layers.fully_connected(input = s_input, num_outputs=1, weights_initializer=tf.contrib.layers.xavier_initializer())
t_output = tf.contrib.layers.fully_connected(input = s_input, num_outputs=1)
现在您可以访问可训练变量
vars = tf.trainable_variables()
并复制它们(前半部分是 s_output 中的变量,后半部分是 t_output 中的变量):
copy_ops = [vars[ix+len(vars)//2].assign(var.value()) for ix, var in enumerate(vars[0:len(vars)//2])]
现在您可以使用以下方法复制数据:
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
map(lambda x: sess.run(x), copy_ops)
print(sess.run(vars[2]))
希望这就是您正在寻找的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)