Доброго времени суток! Решил для себя заняться нейросетями. Прочитал книгу Тарика Рашида "Make Your Own Neural Network", там в конце есть пример реализации трёхслойного перцептрона для классификации рукописных цифр с использованием матриц. Если кратко, то при таком подходе выход слоя нейронной сети - это произведение матриц весов связей с предыдущим слоем на матрицу входов этого слоя. И в той, и в другой матрице диапазон значений от нуля до единицы. Интереса ради решил переписать реализацию из книги на C++ с использованием Boost. В реализации на C++ сигнал всех нейронов выходного слоя (что является, по сути, вероятностью принадлежности к какому-либо классу) почему-то равен 1.0, получается что то, что подали на вход на 100% относится ко всем классам, чего быть не может. Затем переписал с Python на C++ с Eigen, который используется в TensorFlow, то же самое. Переписал на Go + Gonum, то же самое. Первое расхождение уже после первого умножения матриц: умножения матрицы весов связей входного слоя со скрытым. В результате получается матрица со значениями типа 3.27362482790, 5.4859804, 6.4859834 и т.д. Но как такое возможно, если максимальные значения в умножаемых матрицах не превышают единицы? Ссылки на реализации: