Самостоятельно подключенная сеть, использующая tesnsorflow, занимает слишком много памяти и не может пройти обучение
Для своего проекта я пишу не полностью подключенную сеть feedforword, используя tenorflow.
Я использую только скалярные переменные для генерации весов, а не матричные переменные из-за не полностью связности.
По этой причине я получаю гибкость для подключения нейронов из двух соседних слоев соответственно.
К сожалению, обучение этой сети занимает слишком много памяти. введите описание изображения здесь Также обучение не удалось, если в сети есть больше слоев (у меня есть итерация для определения количества слоев)
Я выпустил свой код на github: https://github.com/hezhouyuanren/BP-like-Decoder.git. Я прыгаю за вашу помощь
1 ответ
Вместо использования одного скалярного значения для каждого веса, что, вероятно, приведет к огромной структуре графа, вы можете создавать обычные полностью связанные слои, а затем удалять ненужные соединения. Например, для входа X с N объектами и слоем размера M у вас будет типичная весовая матрица W размера N x M. Затем вы можете иметь другую матрицу C, также N x M, такую, что Cij равно 1, если есть связь между входной фреймой i и нейроном слоя j и 0, если ее нет. Выход слоя (до активации) будет тогда X * (W · C), где * - обычный матричный продукт и · - поэлементный продукт. Это также должно хорошо сочетаться с обучением (при условии, что C не обучаем), так как значения, где C равно 0, просто не будут влиять на обновления параметров. Единственная проблема заключается в том, что вы используете матрицу большего размера, чем вам нужно, но если у вас очень большое количество очень больших слоев, это не должно быть большой проблемой (безусловно, менее проблематичным, чем тысячи узлов скалярного графа).