Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2017 11:09:33

Insturbed
Зарегистрирован: 2017-11-24
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с простой нейросетью

Буду краток. Есть код для нейросети, которая предсказывает выходные данные на основе входных, подскажите, в чём ошибка?
Версия 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)

Офлайн

#2 Ноя. 24, 2017 11:54:06

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Помогите с простой нейросетью

Insturbed
Буду краток. Есть код для нейросети, которая предсказывает выходные данные на основе входных, подскажите, в чём ошибка?Версия python 3.6, работаю через юпитер
1. В чем именно ошибка?
2. if deriv: - достаточно.
3. Где bias?
4. f(x)*(1-f(x)) - это вы так производную взяли? Можно пруф откуда скопировали?

Офлайн

#3 Ноя. 24, 2017 15:36:17

Insturbed
Зарегистрирован: 2017-11-24
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с простой нейросетью

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
Честно-говоря с питоном очень плох, но код нужен именно на нём

Офлайн

#4 Ноя. 24, 2017 17:15:40

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Помогите с простой нейросетью

Используйте range.

Плюс к тому как вы производную берете, посмотрите тут.

 ds = (exp(-x))./((1+exp(-x)).^2); % Derivative of sigmoid.

PS. да и f у вас не определено, опять отвалится, смотрите комментарии к статье. Там вроде и с отступами беда.

Отредактировано noob_saibot (Ноя. 24, 2017 17:17:41)

Офлайн

#5 Ноя. 24, 2017 18:18:33

Insturbed
Зарегистрирован: 2017-11-24
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с простой нейросетью

Благодарю, вроде как всё заработало, т.е. выводит эти данные (они и на хабре указаны) при включении

 Выходные данные после тренировки:
[[ 0.00966449]
 [ 0.00786506]
 [ 0.99358898]
 [ 0.99211957]]

Отредактировано Insturbed (Ноя. 24, 2017 18:19:04)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version