1

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

这种权重初始化有替代方法吗?

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

4

1 回答 1

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>})

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

with tf.Session() as sess:
    weight_var.load(<initial weight value>, session=sess)
于 2019-05-17T17:04:55.667 回答