2017-06-19 2 views
3

Ich möchte vorhandene Matrix im NDarray-Format als Anfangsgewicht verwenden, um eine vollständig verbundene Schicht zu erstellen, indem Sie verwenden. Ich bin mir nicht sicher, wie ich das machen soll. Kann jemand helfen? idealerweise möchte ich folgendes machen:Wie verwendet man vorhandene Gewichte (im NDarray-Format) für tf.layers.dense in Python?

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

Aber ich bin mir nicht sicher, ob ich das direkt machen kann.

Antwort

2

Sie müssen einen benutzerdefinierten Kernelinitialisierer angeben. Die Dokumente für tf.layers.dense tun nicht viel, um dies zu erklären, aber zeigen, dass Sie mindestens die Option haben. Sie können:

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

Und um sicherzustellen, dass es funktioniert:

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.] 

Die Dokumentation für tf.constant_initializer.

Beachten Sie, dass Sie einen Eingangstensor tf.layers.dense angeben müssen, der Ihre Eingabeform angibt, also x im obigen, und Sie müssen ein zweites Argument angeben, das die Dimensionalität Ihrer Ausgabe angibt; die 3 im oben genannten. Die Form der x und die Dimensionalität Ihrer Ausgabe hängt von Ihrem Problem und der Form Ihrer Gewichtsmatrix ab.

+1

Es funktioniert. Vielen Dank! –

Verwandte Themen