在 tf.contrib.layers 中分配权重时是否有 constant_initializer 的替代方案
Are there alternatives to constant_initializer when assigning weights in tf.contrib.layers
我想将权重传递给 tensorflow.contrib.layers.conv2d
。
这些层具有参数 weights_initializer
。通过weights_initializer=tf.constant_initializer(tensor)
传递张量时,张量作为节点被额外添加到图中,导致模型的大小增加。
是否有替代此权重初始化的方法?
我知道 tf.nn.conv2d
接受权重作为参数。但是,我正在使用的当前模型使用的是贡献层。
如果您想将权重初始化为某个常量,但又不想将该常量存储在图中,可以使用占位符并在初始化时为其提供一个值。只要有类似的东西:
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)
我想将权重传递给 tensorflow.contrib.layers.conv2d
。
这些层具有参数 weights_initializer
。通过weights_initializer=tf.constant_initializer(tensor)
传递张量时,张量作为节点被额外添加到图中,导致模型的大小增加。
是否有替代此权重初始化的方法?
我知道 tf.nn.conv2d
接受权重作为参数。但是,我正在使用的当前模型使用的是贡献层。
如果您想将权重初始化为某个常量,但又不想将该常量存储在图中,可以使用占位符并在初始化时为其提供一个值。只要有类似的东西:
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)