予測パフォーマンスを優先してKerasを使用してニューラルネットワークを設計しようとしていますが、レイヤーとレイヤーあたりのノードの数をさらに減らすことで十分な高精度を得ることができません。私の重みの大部分が実質的にゼロ(> 95%)であることに気付きました。予測時間を短縮することを期待して、高密度レイヤーをプルーニングする方法はありますか?
専用の方法ではない:(
現在、Kerasでこれを行う簡単な(専用の)方法はありません。
https://groups.google.com/forum/#!topic/keras-users/oEecCWayJrM で議論が進行中です。
このペーパーに興味があるかもしれません: https://arxiv.org/pdf/1608.04493v1.pdf 。
Keras Surgeonをご覧ください: https://github.com/BenWhetton/keras-surgeon
私自身は試していませんが、ドキュメントには、ノードを削除または挿入する機能があると記載されています。
また、剪定に関するいくつかの論文を見た後、多くの研究者はより少ないチャネル(またはより少ない層)で新しいモデルを作成し、次に元のモデルから新しいモデルに重みをコピーしているようです。
Kerasの専用ツールをご覧ください。 https://www.tensorflow.org/model_optimization/guide/pruning
概要が示すように、遅延改善のサポートは進行中の作業です
個別の重みをゼロに設定すると、逆伝播中に更新されなくなりますか?そのvの重みは、あるエポックから次のエポックまでゼロのままにすべきではありませんか?そのため、トレーニングの前に初期の重みをゼロ以外の値に設定します。ノード全体を「削除」したい場合は、そのノードの出力のすべての重みをゼロに設定するだけで、トレーニング中にノードが出力に影響を与えなくなります。