在tf.contrib.layers中分配权重时,constant_initializer是否有替代方法

时间:2019-05-17 16:34:04

标签: tensorflow graph initialization parameter-passing tensorflow-layers

我想将权重传递给tensorflow.contrib.layers.conv2d。 图层具有参数weights_initializer。通过weights_initializer=tf.constant_initializer(tensor)传递张量时,张量会另外作为一个节点添加到图上,从而导致模型的大小增加。

除了权重初始化之外,还有其他方法吗?

我知道tf.nn.conv2d接受权重作为参数。我正在使用的当前模型使用了contrib-layers。

1 个答案:

答案 0 :(得分:3)

如果要将权重初始化为某个常数,但又不想将其存储在图形中,则可以使用占位符并在初始化时为其输入值。就像这样:

weight_init = tf.placeholder(tf.float32, <shape>)
# As a parameter to your layer
weights_initializer=lambda *a, **k: weight_init

请注意weight_init的形状必须与权重张量的大小匹配。然后,在初始化时:

init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op, feed_dict={weight_init: <initial weight value>})

或者,您可以不使用初始化程序,而可以使用weight变量的load方法来代替调用初始化操作。为此,您必须先访问该变量:

with tf.Session() as sess:
    weight_var.load(<initial weight value>, session=sess)