tensorflow-初始化具有相同权重的重复网络

时间:2018-12-19 18:44:29

标签: tensorflow

我想使用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的权重不会改变,反之亦然)

2 个答案:

答案 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_initializerbias_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