如何在python中使用tf.layers.dense的现有权重(以ndarray格式)?

时间:2017-06-19 14:16:07

标签: python tensorflow

我希望使用ndarray格式的现有矩阵作为初始权重,以使用tensorflow.layers.dense创建完全连接的图层。我不知道该怎么做。有人可以帮忙吗?理想情况下,我想做以下事情:

weight = np.array([1,2,3],[1,2,3]) # as example
fully_connected = tf.layers.dense(input, hidden_unit, initializer = weight)

但我不确定我是否可以直接这样做。

1 个答案:

答案 0 :(得分:4)

您需要指定自定义内核初始值设定项。 tf.layers.dense的文档没有做太多解释,但表明你至少可以选择。您可以使用:

init = np.array([[1, 2, 3], [4, 5, 6]])
x = tf.placeholder(tf.float32, shape=[1, 2])
fc = tf.layers.dense(x, 3, kernel_initializer=tf.constant_initializer(init, dtype=tf.float32))

并确保它有效:

with tf.Session() as sess:
    for v in vars:
        print('{}\n{}'.format(v.name, sess.run(v)))

# dense_7/kernel:0
# [[ 1.  2.  3.]
#  [ 4.  5.  6.]]
# dense_7/bias:0
# [ 0.  0.  0.]

tf.constant_initializer的文档。

请注意,您必须为tf.layers.dense提供一个指定输入形状的输入张量,因此在上面提到x,您必须提供第二个参数,告诉它输出的维数;上面的3x的形状和输出的维数将取决于您的问题以及您的体重矩阵需要采取的形状。