Réinitialisation de poids dans Keras couche
Je voudrais réinitialiser (aléatoire), le poids de toutes les couches dans mon Keras (deep learning) modèle. La raison en est que je veux être en mesure de former le modèle plusieurs fois avec des données différentes scissions, sans avoir à faire la (lente) modèle de la recompilation à chaque fois.
Inspiré par cette discussion, je vais essayer le code suivant:
# Reset weights
for layer in KModel.layers:
if hasattr(layer,'init'):
input_dim = layer.input_shape[1]
new_weights = layer.init((input_dim, layer.output_dim),name='{}_W'.format(layer.name))
layer.trainable_weights[0].set_value(new_weights.get_value())
Cependant, seulement en partie les travaux.
En partie, parce que j'ai inspecté un calque.get_weights() les valeurs, et elles semblent changer. Mais lorsque je redémarre la formation, le coût des valeurs sont beaucoup plus faibles que le coût initial des valeurs lors de la première exécution. C'est presque comme si je l'ai réussi réinitialisation de certains poids, mais pas tous d'entre eux.
Des conseils sur les endroits où je vais mal serait vivement appréciée. Thx..
OriginalL'auteur Tor | 2016-11-08
Vous devez vous connecter pour publier un commentaire.
Enregistrer les poids initiaux à droite après la compilation du modèle, mais avant la formation:
et puis, après la formation, "reset", le modèle en rechargeant les poids initiaux:
Cela vous donne une des pommes avec des pommes modèle de comparer les différents ensembles de données et devrait être plus rapide que la recompilation de l'ensemble du modèle.
Pour le code complet extrait de @Tor suggestion:
weights = model.get_weights()
,model.compile(args)
,model.fit(args)
,model.set_weights(weights)
OriginalL'auteur ezchx
Si vous voulez vraiment ré-aléatoire, le poids, et non pas seulement de restaurer les poids initiaux, vous pouvez effectuer les opérations suivantes. Le code est légèrement différente selon que vous êtes en utilisant TensorFlow ou Théano.
Cannot evaluate tensor using `eval()`: No default session is registered.
Voir mon edit
OriginalL'auteur BallpointBen
Réinitialiser tous les calques en vérifiant les initialiseurs:
Est-il obsolète? Maintenant
kernel_initializer
n'a pas d'attributrun
. Dans mon cas,kernel_initializer
est un VarianceScaling objetOriginalL'auteur Mendi Barel
Essayer set_weights.
par exemple:
construire un modèle à dire, les deux convolutifs couches
ensuite définir votre poids (je suis à l'aide d'un simple w, mais vous pouvez utiliser np.aléatoire.uniforme ou quelque chose comme ça si vous voulez)
Prendre un coup d'oeil à ce que sont les couches à l'intérieur d'un modèle
Définir chaque poids pour chaque convolutifs couche (vous verrez que la première couche est en fait l'entrée et vous ne voulez pas changer cela, c'est pourquoi la gamme commence à partir de 1 pas zéro).
Générer une entrée pour votre test et de prédire la sortie de votre modèle
Vous pouvez le changer à nouveau si vous le souhaitez et vérifiez à nouveau pour la sortie:
Exemple de sortie:
De votre coup d'oeil .couches vous pouvez voir que la première couche d'entrée et les autres votre convolutifs couches.
OriginalL'auteur maz
OriginalL'auteur Ashot Matevosyan