Вы пытаетесь обучить сеть выдавать выходные значения 1,2,3,4
, насколько я понял. Тем не менее, на выходе вы используете сигмоид (math.tanh(..)
), значения которого всегда находятся в диапазоне от -1 до 1.
Таким образом, выход вашей нейронной сети всегда находится между -1 и 1, и, таким образом, вы всегда получаете большую ошибку, когда пытаетесь подогнать выходные значения за пределы этого диапазона.
(Я только что проверил, что при масштабировании ваших входных и выходных значений на 0,1, кажется, что есть хороший прогресс в обучении, и я получаю в конце:
error 0.00025
)
Используемая вами нейронная сеть полезна, если вы хотите выполнить классификацию (например, назначить точку данных для класса A, если выходной NN равен <0, или B, если он> 0). Похоже, что вы хотите сделать, это регрессия (соответствует реальной функции).
Вы можете удалить сигмоид на выходном узле, но вам придется немного изменить процедуру обратного распространения, чтобы учесть это.