it-swarm.com.de

Keras: Anzeigen initialisierter Gewichte (d. H. Vor dem Training)

Ich benutze Keras, um ein einfaches Single-Layer-Feed-Forward-Netzwerk zu generieren. Ich möchte die Werte der Gewichtungen besser in den Griff bekommen, wenn sie über das Argument kernel_initializer initialisiert werden. Gibt es eine Möglichkeit, die Werte der Gewichte direkt nach der Initialisierung anzuzeigen (d. H. Bevor das Training abgeschlossen ist)?.

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Prost

Edit 1 : Vielleicht sollte ich erklären, warum ich die initialisierten Gewichte sehen will. Bei Keras bin ich ein wenig verwirrt, wie eine zufällige orthogonale Matrix tatsächlich aussieht. Wenn ich die Werte ausdrucken könnte, würde es mir helfen, diese Funktion besser zu verstehen.

Edit 2 : Die Verwendung von get_weights nach dem Erstellen des Modells, aber vor dem Anpassen, funktioniert nicht. Die zurückgegebenen Gewichte sind immer Null, unabhängig vom verwendeten kernel_initializer.

Edit 3 : Was ich in Edit 2 sage, ist falsch. Zur Verdeutlichung siehe ausgewählte Antwort.

4
Agrippa

Verwenden Sie einfach get_weights() für das Modell. Zum Beispiel:

i = Input((2,))
x = Dense(5)(i)

model = Model(i, x)

print model.get_weights()

Dies wird eine 2x5-Matrix von Gewichten und eine 1x5-Matrix von Verzerrungen drucken:

[array([[-0.46599612,  0.28759909,  0.48267472,  0.55951393,  0.3887372 ],
   [-0.56448901,  0.76363671,  0.88165808, -0.87762225, -0.2169953 ]], dtype=float32), 
 array([ 0.,  0.,  0.,  0.,  0.], dtype=float32)]

Vorspannungen sind Null, da der Standardvorspannungsinitialisierer Null ist.

5
Chris K

Sie müssen die Abmessungen der Eingabe für die erste Ebene angeben, da Sie sonst eine leere Liste erhalten. Vergleichen Sie beide Ergebnisse beider Ausdrucke. Der einzige Unterschied besteht in der Initialisierung der Form der Eingabe.

from keras import backend as K
import numpy as np 
from keras.models import Sequential
from keras.layers import Dense
# first model without input_dim prints an empty list   
model = Sequential()
model.add(Dense(5, weights=[np.ones((3,5)),np.zeros(5)], activation='relu'))
print(model.get_weights())


# second model with input_dim prints the assigned weights
model1 = Sequential()
model1.add(Dense(5,  weights=[np.ones((3,5)),np.zeros(5)],input_dim=3, activation='relu'))
model1.add(Dense(1, activation='sigmoid'))

print(model1.get_weights())
1
youmna salah

Die Antwort von @Chris_K sollte funktionieren - model.get_weights() gibt die richtigen Initialisierungsgewichte aus, bevor fit aufgerufen wird. Versuchen Sie, diesen Code zur Überprüfung der Integrität auszuführen. Es sollten zwei Matrizen (für zwei Ebenen) gedruckt werden, die nicht Null sind, und anschließend zwei Matrizen, die Null sind:

from keras.models import Sequential
from keras.layers import Dense
import keras
import numpy as np

X = np.random.randn(10,3)
Y = np.random.randn(10,)

# create model
model1 = Sequential()
model1.add(Dense(12, input_dim=3, activation='relu'))
model1.add(Dense(1, activation='sigmoid'))

print(model1.get_weights())

# create model
model2 = Sequential()
model2.add(Dense(12, input_dim=3, kernel_initializer='zero', activation='relu'))
model2.add(Dense(1, kernel_initializer='zero', activation='sigmoid'))

print(model2.get_weights())

Hier ist die Ausgabe, die ich sehe:

[
array([[-0.08758801, -0.20260376,  0.23681498, -0.59153044, -0.26144034,
         0.48446459, -0.02285194,  0.0874517 ,  0.0555284 , -0.14660612,
         0.05574059, -0.14752924],
       [ 0.20496374, -0.4272995 ,  0.07676286, -0.38965166,  0.47710329,
        -0.26640627, -0.33820981, -0.48640659,  0.11153179, -0.01180136,
        -0.52833426,  0.56279379],
       [-0.12849617,  0.2982074 ,  0.38974017, -0.58133346, -0.09883761,
         0.56037289,  0.57482034,  0.08853614,  0.14282584, -0.52498174,
        -0.35414279, -0.49750996]], dtype=float32), array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.], dtype=float32), array([[-0.65539688],
       [-0.58926439],
       [ 0.6232332 ],
       [-0.6493122 ],
       [ 0.57437611],
       [-0.42971158],
       [ 0.66621709],
       [-0.17393446],
       [ 0.57196724],
       [-0.01042461],
       [ 0.32426012],
       [-0.08326346]], dtype=float32), array([ 0.], dtype=float32)]
[array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]], dtype=float32), array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.], dtype=float32), array([[ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.]], dtype=float32), array([ 0.], dtype=float32)]
1
charlesreid1