Я пытаюсь создать нейронную сеть с использованием Keras с приоритетом в производительности прогнозирования, и я не могу получить достаточно высокую точность за счет дальнейшего уменьшения количества слоев и узлов на слой. Я заметил, что очень большая часть моих весов фактически равна нулю ( > 95%). Есть ли способ обрезать плотные слои в надежде сократить время прогнозирования?
Обрезка в Keras
Ответ 1
Не выделенный путь :(
В настоящее время нет простого (выделенного) способа сделать это с Keras.
Обсуждение продолжается по адресу https://groups.google.com/forum/#!topic/keras-users/oEecCWayJrM.
Вас также может заинтересовать этот документ: https://arxiv.org/pdf/1608.04493v1.pdf.
Ответ 2
Посмотрите на Keras Surgeon: https://github.com/BenWhetton/keras-surgeon
Я не пробовал сам, но в документации утверждается, что он имеет функции для удаления или вставки узлов.
Кроме того, после просмотра некоторых работ по обрезке кажется, что многие исследователи создают новую модель с меньшим количеством каналов (или с меньшим количеством слоев), а затем копируют веса из исходной модели в новую модель.
Ответ 3
Если вы установите индивидуальный вес на ноль, не помешает ли это обновлению во время обратного распространения? Не должен ли этот вес оставаться нулевым от одной эпохи к другой? Поэтому перед тренировкой вы устанавливаете начальные веса в ненулевые значения. Если вы хотите "удалить" весь узел, просто установите все веса на выходе этого узла на ноль, и это предотвратит какое-либо влияние этих узлов на вывод в течение обучения.
Ответ 4
Смотрите этот специальный инструмент для Keras. https://www.tensorflow.org/model_optimization/guide/pruning
Как видно из обзора, поддержка улучшений задержек находится в стадии разработки