我希望使用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)
但我不确定我是否可以直接这样做。
答案 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.layers.dense
提供一个指定输入形状的输入张量,因此在上面提到x
,您必须提供第二个参数,告诉它输出的维数;上面的3
。 x
的形状和输出的维数将取决于您的问题以及您的体重矩阵需要采取的形状。