2016-12-15 5 views
0

У меня нет выхода после вычисления forward. Мне удалось распечатать X, print(X), который отличается от None, но когда я положил X в Y=[np.transpose(X)] и позвонил ему в sigmoid(np.dot(W[i], Y[i])+B[i]), он станет None. W и B в порядке, сигмоиды работают. Что не так с Y?Нет: выход в функции вперед

def forward(sigmoid,W,B,X): 

    Y,Yp = [np.transpose(X)],[] 
    for i in range(len(W)-1): 
----> F, Fp = sigmoid(np.dot(W[i], Y[i])+B[i]) # problem is here Y is none 
     Y = Y.append(F) 
     Yp= Yp.append(Fp) 

    return Y,Yp 

Это моя функция:

def sigmoid(z): 

    # z is a float 
    y=np.divide(1,1+np.exp(-z)) 
    yp= y*(1-y) 
    return y,yp 

Я не могу видеть, что здесь не так?

+0

Выражение в этой строке включает в себя 'Y [I] и' B [I] '. Проверьте, нет ли 'Y' или' B' 'None'. –

+0

ошибка вызывается 'Y [i]' или 'B [i]' и не имеет ничего общего с 'sigmoid (z)' – AlexG

+0

l обновлено мое сообщение – heisen

ответ

1

Проблема заключается в этих двух строках:

Y = Y.append(F) 
Yp= Yp.append(Fp) 

Оба Y и Yp списки и поэтому .append работает в месте, так что эти списки обновляются. Но сам .append возвращает None, поэтому на второй итерации вашего цикла вы больше не работаете с списками.

Использование:

Y.append(F) 
Yp.append(Fp) 

вместо этого.

Этот небольшой фрагмент кода показывает разницу:

>>> a = [1] 
>>> b = a.append(2) 

>>> print(a) 
[1, 2] 
>>> print(b) 
None 
Смежные вопросы