Я пишу на python нейросеть и пытаюсь всунуть гиперболичесий тангенс но он у меня выдаёт ошибку:
ошибка:
neiro.py:24: RuntimeWarning: overflow encountered in exp
l3=2/(1+np.exp(-(np.dot(l2,syn2))))-1
[[-1.]
[-1.]
[-1.]
[-1.]
[-1.]
[-1.]
[-1.]
[-1.]]
neiro.py:42: RuntimeWarning: overflow encountered in exp
l3=2/(1+np.exp(-(np.dot(l2,syn2))))-1
результат
[-1.]
код:
import numpy as np
X = np.array([[1,1,0,0],[1,1,1,0],[0,1,1,0],[1,0,0,1],[0,0,1,1],[0,1,0,1],[0,1,0,1],[1,1,0,1]])#входные тренировочные данные
y = np.array([[1],[1],[-1],[1],[-1],[-1],[-1],[1]])#выходные тренировочные данные
new_X=np.array([1,1,0,1])#входнве новые данные
syn0 = 2*np.random.random((4,10)) - 1#весы для l1
syn1 = 2*np.random.random((10,2)) - 1#весы для l2
syn2 = 2*np.random.random((2,1)) - 1#весы для l3
for j in range(60000):#обучение
l1=2/(1+np.exp(-(np.dot(X,syn0))))-1
l2=2/(1+np.exp(-(np.dot(l1,syn1))))-1
l3=2/(1+np.exp(-(np.dot(l2,syn2))))-1
l3_delta = (y - l3)*(l3*(1-l3))#дельта l3
l2_delta = l3_delta.dot(syn2.T) * (l2 * (1-l2))#дельта l2
l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))#дельта l1
syn2 += l2.T.dot(l3_delta)#обновление веса syn2
syn1 += l1.T.dot(l2_delta)#обновление веса syn1
syn0 += X.T.dot(l1_delta)#обновление веса syn0
print (l3)
l1=2/(1+np.exp(-(np.dot(new_X,syn0))))-1
l2=2/(1+np.exp(-(np.dot(l1,syn1))))-1
l3=2/(1+np.exp(-(np.dot(l2,syn2))))-1
print ('результат')
print (l3)
и этот код должен выводить единицу посколько придобовление новых данных я сделал так что если первая единичка то 1 если ноль то -1