Обрезка в Keras

Я пытаюсь создать нейронную сеть с использованием Keras с приоритетом в производительности прогнозирования, и я не могу получить достаточно высокую точность за счет дальнейшего уменьшения количества слоев и узлов на слой. Я заметил, что очень большая часть моих весов фактически равна нулю ( > 95%). Есть ли способ обрезать плотные слои в надежде сократить время прогнозирования?

Ответ 2

Посмотрите на Keras Surgeon: https://github.com/BenWhetton/keras-surgeon

Я не пробовал сам, но в документации утверждается, что он имеет функции для удаления или вставки узлов.

Кроме того, после просмотра некоторых работ по обрезке кажется, что многие исследователи создают новую модель с меньшим количеством каналов (или с меньшим количеством слоев), а затем копируют веса из исходной модели в новую модель.

Ответ 3

Если вы установите индивидуальный вес на ноль, не помешает ли это обновлению во время обратного распространения? Не должен ли этот вес оставаться нулевым от одной эпохи к другой? Поэтому перед тренировкой вы устанавливаете начальные веса в ненулевые значения. Если вы хотите "удалить" весь узел, просто установите все веса на выходе этого узла на ноль, и это предотвратит какое-либо влияние этих узлов на вывод в течение обучения.

Ответ 4

Смотрите этот специальный инструмент для Keras. https://www.tensorflow.org/model_optimization/guide/pruning

Как видно из обзора, поддержка улучшений задержек находится в стадии разработки