Używam Keras zrobić kilka eksperymentów, a ja po prostu monitorować aktualizację masy prostego młp modeluCo zwróci "layer.get_weights()"?
# 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
dla pierwszej warstwy gęstej, mam macierz zer. Myślałem, że trening nie zmienia tej wagi. Jednak wagi w innych warstwach są zmieniane. Więc jestem zdezorientowany, dlaczego pierwsza warstwa pozostaje niezmieniona? Sprawdziłem kod źródłowy, ale jeszcze nie otrzymał odpowiedzi, a następnie próbowałem monitorowanie:
model.layers[0].get_weights()[1] # get_weight() returns a list of weights
Tym razem ciężary uległ zmianie. Więc zastanawiam się, która waga jest "prawdziwą" wagą, która działa podczas treningu? Dlaczego na liście wag znajdują się dwa elementy?
Definicja 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
Czy możesz podać nam funkcję mlp()? To naprawdę dziwne zachowanie. –
@ MarcinMożejko Zaktualizowałem to. Jestem zdezorientowany na drugiej wadze na liście 'layer.weights'. –
Czy skompilowałeś swój model? –