我想使用tf.layers.dense创建两个具有相同架构和权重完全相同的模型
m1 = tf.layers.dense(input, units=10, activation='relu', name='m1')
m2 = tf.layers.dense(input, units=10, activation='relu', name='m2')
如何将m2的权重和偏差设置为与m1相同? (相同的值,而不是共享的权重,因此训练m1时,m2的权重不会改变,反之亦然)
答案 0 :(得分:1)
首先应创建权重和偏差初始化程序:
import tensorflow as tf
tf.enable_eager_execution()
init_kernel = tf.constant_initializer([[1,2,3],[4,5,6]])
init_bias = tf.constant_initializer([7,8,9])
然后,您可以创建两个密集层,并将相同的初始化程序传递给kernel_initializer
和bias_initializer
。
layer1 = tf.layers.dense(inputs=inputs, units=3, kernel_initializer=init_kernel, bias_initializer=init_bias)
layer2 = tf.layers.dense(inputs=inputs, units=3, kernel_initializer=init_kernel, bias_initializer=init_bias)
如果我正确理解了您的问题,这就是您所需要的。
答案 1 :(得分:0)
gorjan答案是正确的,但我还发现了另一种解决方案,在更复杂的情况下更易于使用:
with tf.Session() as sess:
with tf.variable_scope("m1", reuse=True):
weights_m1 = sess.run(tf.get_variable("kernel"))
with tf.variable_scope("m2", reuse=True):
sess.run(tf.get_variable("kernel").assign(weights_m1))
weights_m2 = sess.run(tf.get_variable("kernel"))
print(np.array_equal(weights_m1, weights_m2) # True