Синусоидальная регрессия нейронной сети не работает с большим диапазоном и большими переменными - PullRequest
0 голосов
/ 14 апреля 2020

Я сделал код, который, учитывая два набора Ax и Ay, возвращает синусоидальную функцию K + H sin (a x), которая лучше всего подходит для графика Ax X Ay. Для тестирования я позволю Ax X быть точной синусоидальной функцией и посмотреть, предсказывает ли программа все переменные. Однако я не могу допустить, чтобы такие переменные, как my_range, kr, Hr и ar, были слишком большими, потому что это приводит к высокой средней ошибке. Для этого есть ошибка или математическое объяснение?

код:

import numpy as np
from math import *
from random import *
my_range = pi/2
Ax = np.arange(0,my_range, 0.01)
kr=2
Hr=2
ar=2
Ay = kr+ Hr*np.sin(ar*Ax)
k= random()*2 -1
H = random()*2 -1
a= random()*2 -1
rate = 0.05
for n in range(1,50000):
    rand = randint(0, Ax.shape[0]-1)
    xi = Ax[rand]
    yi= Ay[rand]   
    o=a*xi
    u2=k+H*sin(o)
    u =u2-yi
    y=u**2   
    dy_du = 2*u
    du2_dH = sin(o)
    du2_do = cos(o)
    do_da = xi   
    dy_dk = dy_du
    dy_dH=dy_du*du2_dH
    dy_da=dy_du*du2_do*do_da   
    a -= dy_da*rate
    k -= dy_dk*rate
    H -=dy_dH*rate
# k + H*sin(a*x)
print("y="+str(k)+"+"+str(H)+"*sin("+str(a)+"x"+")") 
error_f = Ay- (k+H*np.sin(a*Ax))
average_error = np.average(np.abs(error_f))
print("average error="+str(average_error))

Obs: это код со значениями, с которыми работает регрессия

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