Форум сайта python.su
Буду краток. Есть код для нейросети, которая предсказывает выходные данные на основе входных, подскажите, в чём ошибка?
Версия python 3.6, работаю через юпитер
import numpy as np # Сигмоида def nonlin(x,deriv=False): if(deriv==True): return f(x)*(1-f(x)) return 1/(1+np.exp(-x)) # набор входных данных X = np.array([ [0,0,1], [0,1,1], [1,0,1], [1,1,1] ]) # выходные данные y = np.array([[0,0,1,1]]).T # сделаем случайные числа более определёнными np.random.seed(1) # инициализируем веса случайным образом со средним 0 syn0 = 2*np.random.random((3,1)) - 1 for iter in xrange(10000): # прямое распространение l0 = X l1 = nonlin(np.dot(l0,syn0)) # насколько мы ошиблись? l1_error = y - l1 # перемножим это с наклоном сигмоиды # на основе значений в l1 l1_delta = l1_error * nonlin(l1,True) # !!! # обновим веса syn0 += np.dot(l0.T,l1_delta) # !!! print "Выходные данные после тренировки:" print l1 "Выходные данные после тренировки:" [[ 0.00966449] [ 0.00786506] [ 0.99358898] [ 0.99211957]]
Отредактировано Insturbed (Ноя. 24, 2017 11:10:31)
Офлайн
Insturbed1. В чем именно ошибка?
Буду краток. Есть код для нейросети, которая предсказывает выходные данные на основе входных, подскажите, в чём ошибка?Версия python 3.6, работаю через юпитер
Офлайн
noob_saibotОтсюда брал код https://habrahabr.ru/post/271563/
Можно пруф откуда скопировали?
NameError Traceback (most recent call last) <ipython-input-18-a6c8d53f7ac8> in <module>() 23 syn0 = 2*np.random.random((3,1)) - 1 24 ---> 25 for iter in xrange(10000): 26 27 # прямое распространение NameError: name 'xrange' is not defined
Офлайн
Используйте range.
Плюс к тому как вы производную берете, посмотрите тут.
ds = (exp(-x))./((1+exp(-x)).^2); % Derivative of sigmoid.
Отредактировано noob_saibot (Ноя. 24, 2017 17:17:41)
Офлайн
Благодарю, вроде как всё заработало, т.е. выводит эти данные (они и на хабре указаны) при включении
Выходные данные после тренировки: [[ 0.00966449] [ 0.00786506] [ 0.99358898] [ 0.99211957]]
Отредактировано Insturbed (Ноя. 24, 2017 18:19:04)
Офлайн