0
votes

Comment puis-je obtenir des poids et des biais de mon modèle?

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 - xxx

model.layers [0] .get_weights () [1]

erreur - IndexError: Index de la liste hors de portée

C'est ce qui a été mentionné dans quelques questions, mais je finis par obtenir l'erreur hors des limites pour cela.

J'ai une autre question, l'index suivi après modèle.layers [] , correspond-il au calque? Par exemple model.layers [1] donne les poids correspondant à la deuxième couche, quelque chose comme ça?


0 commentaires

4 Réponses :


2
votes

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] pour déterminer où Keras enregistre les poids dont j'avais besoin. Dans mon ancien code, model.layers [0] .get_weights () [1] retournerait les biais, tandis que model.layers [0] .get_weights () [0] 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] Ne fonctionne pas, essayez avec model.layers [1] .get_weights () [1] , car je ne suis pas sûr de Aplatier les couches, mais je sais que des couches denses devraient sauver leurs poids .



1
votes

La première couche (index 0) de votre modèle est un aplatissez code> couche, qui n'a aucun poids, c'est pourquoi vous obtenez des erreurs.

Pour obtenir le dense Code> Couche, qui est la deuxième couche, vous devez utiliser Index 1: P>

model.layers[1].get_weights()[1]


2 commentaires

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]


@Adityadas Oui, les couches sont indexées comme n'importe quel tableau



0
votes

juste modèle.get_weights () , vous obtiendrez tous les poids et biais de votre modèle


0 commentaires

0
votes

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)


0 commentaires