Можно ли генерировать входы из выходов с использованием нейронной сети Theano / numpy? - PullRequest
0 голосов
/ 13 апреля 2020

Начну с того, что я очень новичок в Theano (и NumPy, хотя я использовал Python довольно немного раньше). Я строю Neural Net из кода, найденного в https://github.com/MichalDanielDobrzanski/DeepLearningPython35. Для моего класса я планирую генерировать «плохие» данные, то есть я добавил подмножество изображений в набор данных MNIST, каждый из которых содержит квадрат «черного хода» в правом нижнем углу. Идея заключается в том, что я могу заставить нейронную сеть поверить, что любое число, скажем «0», будет соответствовать «0», если у него нет такого маленького квадрата, и в этом случае оно будет соответствовать другому числу, например «9». ». Это отображение трудно обнаружить с точки зрения человека (кроме простого взгляда на числа и выяснения его), поэтому я хочу взять свой обученный нейронный код net и, по сути, обратить его вспять: я хочу присвоить 1.0 узлу в выходном слое и 0,0 везде (или числа, близкие к 1 и 0), а затем вернуться к входам. Эти входные значения могут затем генерировать изображение, представляющее «горячие точки» указанной метки c или места, где наиболее специфично выглядит net (как положительно, так и отрицательно).

Моя главная проблема сейчас заключается в том, что, хотя у меня есть нейронная сеть, которая определенно правильно обучается на плохих данных и отлично продвигается вперед, я не могу понять, как сделать ее go обратной. Вот некоторые из идей, которые у меня были:

  1. Просто запустите обратное распространение, но не разрешайте обновления. Проблема здесь в том, что Theano делает много вещей автоматически, и я действительно не могу понять, если возможно, как я мог бы получить эти индивидуальные значения входного узла.
  2. Перестройте net в обратном порядке. Это кажется мне самой многообещающей версией, но я не знаю, действительно ли слои допускают обратное построение и, если они это делают, как просто * установить * веса.
  3. Поместите все веса в набор списков и используйте их. Это проблематично c, поскольку, хотя я могу получить веса и смещения в виде набора списков (и списков списков), я не могу использовать их для go назад, поскольку это не просто умножение.

Честно говоря, все это сводится к тому, что я выбрал проект, который выходит далеко за рамки моих знаний, а затем, когда происходят все эти другие проблемы с коронавирусом, не имея времени для приобретения знаний, необходимых для выучите его.

Если кто-нибудь может дать советы о том, как действовать, будь то потенциальное решение с помощью Theano, возможный способ ручного бега назад ... действительно, что бы ни ценилось, пока это полезно.

Для тех, кто заинтересован, в git над основными важными частями находятся network3.py, строки 80+ и test.py, строки 156+.

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