2016-09-19 1 views
4

Ich versuche die Gewichtsmatrix von einer vorherigen Schicht wiederzuverwenden. Als Spielzeug Beispiel möchte ich so etwas wie dies zu tun:Keras - Gewichte von einer vorherigen Schicht wiederverwenden - Umwandlung in Keras Tensor

import numpy as np 
from keras.layers import Dense, Input 
from keras.layers import merge 
from keras import backend as K 
from keras.models import Model 

inputs = Input(shape=(4,)) 
inputs2 = Input(shape=(4,)) 
dense_layer = Dense(10, input_shape=(4,)) 
dense1 = dense_layer(inputs) 

def my_fun(my_inputs): 
    w = my_inputs[0] 
    x = my_inputs[1] 

    return K.dot(w, x) 

merge1 = merge([dense_layer.W, inputs2], mode=my_fun) 

Das Problem ist, dass dense_layer.W ist kein keras Tensor. So bekomme ich folgende Fehlermeldung:

Exception: Output tensors to a Model must be Keras tensors. Found: dot.0 

Jede Idee, wie dense_layer.W zu einem Keras Tensor konvertieren?

Danke

Antwort

0

Ich glaube nicht, dass Sie die Merge-Schicht wie folgt verwenden können.

Aber um Ihre Frage zu beantworten, müssen Sie wahrscheinlich eine benutzerdefinierte Ebene erstellen, die Gewichte gebunden hat. Schauen Sie sich this example an.

Andernfalls können Sie auf die Gewichtung eines Layers zugreifen, indem Sie die get_weights() -Methode für diesen Layer verwenden. Dadurch wird eine Liste von numpigen Arrays mit den Gewichten abgerufen. Für den Fall der Dichte-Ebene enthält es Gewichte und Verzerrungen.

0

Es gibt zwei Fälle für die Lösung, je nachdem, was Sie zu tun versuchen:

  1. Sie möchten die W-Matrix teilen zwischen Ihren beiden Operationen, und die W-Matrix für diese beiden Operationen wird beibehalten, auch wenn sich ihr Wert während des Trainings oder aus einem anderen Grund ändert. Dann sollten Sie dense.weights[0] verwenden, die die W-Matrix als Tensor von Ihrer dichten Schicht ist.

  2. Wenn Sie nur den Wert der W-Matrix zum Zeitpunkt der Codeeingabe verwenden und dieser Wert sich nie ändern wird, verwenden Sie K.constant(dense.get_weights[0]), die die Gewichtungen als numpy Array extrahiert und in Tensor konvertiert.