我想使用 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)

但我不确定是否可以直接做到这一点。

最佳答案

您需要指定一个自定义内核初始值设定项。 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 的形状和输出的维度将取决于您的问题以及您的权重矩阵需要采用的形状。

关于python - 如何在 python 中为 tf.layers.dense 使用现有的权重(以 ndarray 格式)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44632989/

10-12 21:39