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?
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 .
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.
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
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.