J'ai un réseau de neurones simple, j'ai besoin d'obtenir des poids et des biais du modèle. J'ai essayé quelques approches discutées avant, mais je continue à obtenir une erreur de valeur hors limites. Je ne sais pas comment résoudre ce problème, ou ce qui me manque.
Network - P> erreur -
C'est ce qui a été mentionné dans quelques questions, mais je finis par obtenir l'erreur hors des limites pour cela. P> J'ai une autre question, l'index suivi après model.layers [0] .get_weights () [1] code> p> p> IndexError: Index de la liste hors de portée Code> P> modèle.layers [] code>, correspond-il au calque?
Par exemple model.layers [1] code> donne les poids correspondant à la deuxième couche, quelque chose comme ça? P> p>
4 Réponses :
Je suis allé là-bas, j'ai regardé mon ancien code pour voir si je pouvais me souvenir de comment ai-je résolu cette question.
Ce que j'ai fait était d'imprimer la longueur du modèle.layer [index] .get_weights () [x] code> pour déterminer où Keras enregistre les poids dont j'avais besoin.
Dans mon ancien code, model.layers [0] .get_weights () [1] code> retournerait les biais, tandis que model.layers [0] .get_weights () [0] code > retournerait les poids réels.
En tout état de cause, prendre en compte qu'il y a des couches que les poids ne sont pas sauvegardés (car ils n'ont pas de poids), donc si vous demandez model.layers [0] .get_weights () [0] code > Ne fonctionne pas, essayez avec model.layers [1] .get_weights () [1] code>, car je ne suis pas sûr de Aplatier les couches, mais je sais que des couches denses devraient sauver leurs poids . p>
Vous pouvez voir les commentaires à la fin de mon ancien code si cela vous aide [ github.com/abeagomez/cnn_triplet_loss_with_keras/blob/maste r / ...
Vous pouvez également l'utiliser si vous avez besoin des poids après chaque époque [ Stackoverflow.com/questions/46473823/... < / a>
Hey, merci! Donc, par exemple, je gère 5 époques - les poids et les préjugés que je reçois à la fin seraient fondamentalement les poids et les biais de la 5ème époque, n'est-ce pas? En outre, j'ai réussi à le faire fonctionner - je pense. model.layers [1] .get_weights () [0] code> me donne un tableau multidimensionnel avec des sous-bras avec 10 éléments chacun, et pour model.layers [1] .get_weights () [1]. Code> Je reçois un seul tableau ... Donc, je suppose que ces derniers sont les préjugés et les premiers sont les poids (puisque j'ai 10 classes). Est-ce que ça fait du sens?
@Adityadas exactement! Ces derniers sont les préjugés et les anciens sont les poids et oui, les poids et les biais que vous obtenez à la fin proviennent de votre dernière époque, je n'ai fourni que les informations supplémentaires au cas où vous vouliez voir comment vos poids ressemblent lors de la formation: )
La première couche (index 0) de votre modèle est un Pour obtenir le aplatissez code> couche, qui n'a aucun poids, c'est pourquoi vous obtenez des erreurs. dense Code> Couche, qui est la deuxième couche, vous devez utiliser Index 1: P> model.layers[1].get_weights()[1]
Si nous avons plusieurs couches denses? Pour la deuxième couche dense (la troisième couche globale) utiliserons-nous model.layers [2] .get_weights () [2] code>
@Adityadas Oui, les couches sont indexées comme n'importe quel tableau
juste modèle.get_weights () code>, vous obtiendrez tous les poids et biais de votre modèle P>
Pour obtenir les poids et les biais sur une kéras séquentielle et pour chaque itération, vous pouvez le faire comme dans l'exemple suivant:
# create model
model = Sequential()
model.add(Dense(numHiddenNeurons, activation="tanh", input_dim=4, kernel_initializer="uniform"))
model.add(Dense(1, activation="linear", kernel_initializer="uniform"))
# Compile model
model.compile(loss='mse', optimizer='adam', metrics=['accuracy', 'mse', 'mae', 'mape'])
weightsBiasDict = {}
weightAndBiasCallback = tf.keras.callbacks.LambdaCallback \
(on_epoch_end=lambda epoch, logs: weightsBiasDict.update({epoch:model.get_weights()}))
# Fit the model
history= model.fit(X1, Y1, epochs=numIterations, batch_size=batch_size, verbose=0, callbacks=weightAndBiasCallback)