Должен ли ANN вычислять высокие значения, которые вызывают ошибки памяти? - PullRequest
0 голосов
/ 09 января 2019

Я написал простую многоуровневую нейронную сеть feedfoward В Excel VBA, используя следующий ресурс в качестве руководства: https://www.analyticsvidhya.com/blog/2017/05/neural-network-from-scratch-in-python-and-r/

Я использую его для решения проблемы классификации с восемью различными категориями. Основной проблемой, с которой я сталкиваюсь, является случайная ошибка переполнения в VBA. Это происходит конкретно на функцию активации сигмоида. Обычно это происходит, если я делаю 5000 или более эпох своих данных.

Мои входные данные имеют следующий формат:

'Binary Encoding  'Gaussian Normalization
10000000         -.0161 
00001000         -.0152
00100000         -.0143
00001000         -.0132

У меня есть 4 различных входа в двоичном кодировании и 2 числовых входа с использованием нормализации Гаусса.

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

Мое исследование показало, что проблема может быть связана с функцией EXP (). По следующей ссылке: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/exp-function

В нем говорится, что функция EXP () не может обрабатывать числа, которые превышают 709.782712893.

Dim X As Double 
X = CDbl(Round(Trim(SubString2(E)), 3))
Sum(ii) = Round(1# / (1# + Exp(-X)), 3) 'Error occurs on this line

Теперь, моя первая мысль: В общем, должна ли нейронная сеть производить такое большое число? Это заставляет меня думать, что я могу делать что-то не так.

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

Как видите, я пытался неявно убедиться, что каждое значение было двойного типа, прежде чем обнаружил, что проблема может быть в функции EXP ().

...