Нейронная сеть не может приблизить сложение двух переменных - PullRequest
0 голосов
/ 10 ноября 2019

Я тренирую нейронную сеть, которая приближается к функции Y = A + B . Значения A и B лежат между 1 и 10. Модель обучена на 50 примерах. Кроме того, входные и выходные данные нормализуются / масштабируются.

Конфигурация нейронной сети: 2 входных нейрона -> 5 скрытых нейронов -> 1 выходной нейрон.

Это моя реализация:

import numpy as np
# sigmoid function
def sigmoid(x,deriv=False):
    if(deriv==True):
        return x*(1-x)
    return 1/(1+np.exp(-x))

#Creating data
# input dataset
X = np.random.randint(1,10,size=(50,2)).astype(int)
X = X.astype('float')/float(20)
# output dataset            
y = np.sum(X, axis = 1, keepdims=True) 
y = y.astype('float')/float(20)

#Initialising weights for layer 0 and layer 1
np.random.seed(1)

# randomly initialize our weights with mean 0
syn0 = 2*np.random.random((2,5)) - 1
syn1 = 2*np.random.random((5,1)) - 1

#Train
for iter in range(6000):
    # forward propagation
    l0 = X
    l1 = sigmoid(np.dot(l0,syn0))
    l2 = sigmoid(np.dot(l1,syn1))

    l2_error = y-l2
    if (iter% 100) == 0:
        print ("Error:" + str(np.mean(np.abs(l2_error))))

    l2_delta = l2_error*sigmoid(l2, deriv=True)

    l1_error = l2_delta.dot(syn1.T)
    l1_delta = l1_error * sigmoid(l1,True)

    # update weights
    syn1 += l1.T.dot(l2_delta)
    syn0 += l0.T.dot(l1_delta)

#Predict 
l0 = [[4,4]]
l1 = nonlinn(np.dot(l0,syn0))
l2 = nonlinn(np.dot(l1,syn1))
print (l2*20)

Результат, который я получаюдля A = 4 B = 4 составляет 9,89. Почему результат не точный?

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