ich Keras bin mit ein paar Experimente zu tun und ich überwacht nur das Gewicht Update für ein einfaches mlp Modell:Was gibt `layer.get_weights()` zurück?
# model contains one input layer in the format of dense,
# one hidden layer and one output layer.
model=mlp()
weight_origin=model.layers[0].get_weights()[0]
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(.....) # with adam optimizer
weight_updated=model.layers[0].get_weights()[0]
print weight_origin-weight_updated
Für die erste dichte Schicht, bekam ich eine Matrix aus Nullen. Ich dachte, das Training ändert dieses Gewicht nicht. Gewichte in anderen Ebenen werden jedoch geändert. Also ich bin verwirrt, warum die erste Schicht unverändert ist? ich den Quellcode überprüft, aber immer noch keine Antwort, dann habe ich versucht, Überwachung:
model.layers[0].get_weights()[1] # get_weight() returns a list of weights
Dieses Mal werden die Gewichte verändert haben. Also frage ich mich, welches Gewicht das "wahre" Gewicht ist, das während des Trainings funktioniert? Warum gibt es zwei Elemente in der Gewichtsliste?
Definition von mlp()
:
def mlp():
model=Sequential()
model.add(Dense(500, input_dim=784))
model.add(Dense(503,init='normal',activation='relu'))
model.add(Dense(503,init='normal',activation='relu'))
model.add(Dense(10, activation='softmax'))
return model
Könnten Sie uns die mlp() -Funktion bereitstellen? Das ist wirklich seltsames Verhalten –
@ MarcinMożejko Ich habe es aktualisiert. Ich bin verwirrt auf dem zweiten Gewicht in der Liste "Layer.Weights". –
Haben Sie Ihr Modell zusammengestellt? –