web-dev-qa-db-fra.com

Taille à Keras

J'essaie de concevoir un réseau neuronal en utilisant Keras avec une priorité sur les performances de prédiction, et je ne peux pas obtenir une précision suffisamment élevée en réduisant davantage le nombre de couches et de nœuds par couche. J'ai remarqué qu'une très grande partie de mes poids est effectivement nulle (> 95%). Existe-t-il un moyen d'élaguer les couches denses dans l'espoir de réduire le temps de prédiction?

17
Mirac7

Pas un moyen dédié :(

Il n'y a actuellement aucun moyen facile (dédié) de le faire avec Keras.

Une discussion est en cours sur https://groups.google.com/forum/#!topic/keras-users/oEecCWayJrM .

Vous pouvez également être intéressé par cet article: https://arxiv.org/pdf/1608.04493v1.pdf .

6
grovina

Jetez un oeil à Keras Surgeon: https://github.com/BenWhetton/keras-surgeon

Je ne l'ai pas essayé moi-même, mais la documentation prétend qu'il a des fonctions pour supprimer ou insérer des nœuds.

De plus, après avoir examiné certains articles sur l'élagage, il semble que de nombreux chercheurs créent un nouveau modèle avec moins de canaux (ou moins de couches), puis copient les poids du modèle d'origine vers le nouveau modèle.

6
mostafa.elhoushi

Voir cet outillage dédié pour Keras. https://www.tensorflow.org/model_optimization/guide/pruning

Comme le suggère la vue d'ensemble, la prise en charge des améliorations de la latence est un travail en cours

1
Alan Chiao

Si vous définissez un poids individuel à zéro, cela ne l'empêchera-t-il pas d'être mis à jour pendant la propagation arrière? Ce poids ne devrait-il pas rester nul d'une époque à l'autre? C'est pourquoi vous définissez les poids initiaux sur des valeurs non nulles avant l'entraînement. Si vous souhaitez "supprimer" un nœud entier, définissez simplement tous les poids sur la sortie de ce nœud à zéro et cela empêchera ces nœuds d'avoir un effet sur la sortie tout au long de la formation.

0
hobs