Сделать память эффективной нейронной сети - PullRequest
0 голосов
/ 01 февраля 2020

Я создаю библиотеку CNN в python, используя Numpy для хранения и вычисления данных. В каждом слое есть в основном 5 типов данных: входные данные , весовые коэффициенты , смещение , выходные данные и a (выходные данные) где a - функция активации (смещение и активация необязательны).

Изначально я выполнял операцию активации на месте на выходе, что означает (выходные данные) заменяет выходные данные в памяти.

Сейчас я работаю над процессом обратного распространения, мне интересно, нужно ли сохранять в памяти как выход, так и (выход), чтобы я мог рассчитать градиентный спуск.
Для функции ReLU это выглядит ненужным потому что легко найти производную (либо 1, либо 0).
Для сюръективных функций, таких как sigmoïd, я мог бы вычислить обратную величину.
Я также рассматривал только сохранение выходных данных и пересчет активации во время обратной передачи.

Итак, мои вопросы: насколько популярные инструменты, такие как Tensorflow, работают с памятью для их нейронной сети и какие данные являются обязательными для выполнения SDG?

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

...