Я написал простую многоуровневую нейронную сеть 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 ().