Есть ли способ удалить 1-2 (или более) указанных c нейронных соединений между слоями в NN, используя Tensorflow (с Keras) или PyTorch? - PullRequest
0 голосов
/ 16 января 2020

Я нахожусь в процессе создания GUI для создания различных уникальных нейронных сетей. Я отказался от использования TensorFlow 2.0 (с Keras API) или PyTorch в качестве серверной части. Но мне не хватает информации по этим темам, и я был бы очень признателен, если кто-нибудь может ответить на эти вопросы:

Язык: Python

1) Как удалить указанные c Нейронные соединения между слоями в NN, используя любую из этих структур? 2) Как установить c правило обучения для некоторых нейронов в слое? 3) Как установить конкретную c активирующую функцию для некоторых нейронов в слое?

Огромное спасибо, пожалуйста, не стесняйтесь отвечать, любой информация полезна.

PS Если кто-то хочет внести свой вклад в проект, это было бы здорово. Screenshot of the GUI functionality I want to add

1 Ответ

0 голосов
/ 18 января 2020

Работа этих библиотек заключается в том, что соединения / веса для слоя представляются в виде «тензора» (т.е. многомерного массива или матрицы). Это заставляет приложение слоя вести себя как операция линейной алгебры (умножение матрицы). PyTorch / Tensorflow не представляет отдельные нейронные связи в виде отдельных объектов в коде таким образом, что имеет смысл думать о них как о чем-то, над чем можно поработать или удалить по отдельности.

1) Как удалить определенные c нейронные соединения между слоями в NN, используя любую из этих структур?

Вы можете установить один из весов на ноль, т. Е. layer.weights[x, y]=0, хотя это на самом деле не «удаляет» его и не предотвращает его последующее изменение на ненулевое значение.

Возможно, вы могли бы использовать разреженный тензор вместо плотного, который является форматом координат, содержащим список всех ненулевых индексов и значений. Разреженность будет более эффективной, если у вас низкий процент ненулевых значений.

2) Как установить конкретное c правило обучения для некоторых нейронов в слое?

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

https://discuss.pytorch.org/t/two-optimizers-for-one-model/11085

3) Как установить функцию активации c для некоторых нейронов в слое?

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

Например, если у вас было

layer1=torch.nn.Linear(10, 10)

, но вместо просто torch.relu(layer1(input)) вы хотите применить relu к некоторым выходам и, скажем, sigmoid к другим, вы можете просто:

layer1a = torch.nn.Linear(10, 5)
layer2b = torch.nn.Linear(10, 5)

, а затем

torch.cat( (torch.relu(layer1a(x)), torch.sigmoid(layer1b(x)) ), 0)

Точно так же, как вы может разбить любой тензор на части, применить различные функции к различным диапазонам / значениям и сшить результаты обратно вместе с torch.cat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...