2016-12-15 2 views
0

Ich habe keine Ausgabe nach der Berechnung forward. Es gelang mir, X, print(X) zu drucken, das sich von None unterscheidet, aber wenn ich X in Y=[np.transpose(X)] setze und es in sigmoid(np.dot(W[i], Y[i])+B[i]) anrufe, wird es None. W und B sind ok, sigmoide Arbeiten. Was stimmt nicht mit Y?Keine: Ausgabe in Funktion vorwärts

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 

Dies ist meine Funktion:

def sigmoid(z): 

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

Ich kann nicht sehen, was hier falsch ist?

+0

Der Ausdruck in dieser Zeile umfaßt 'Y [i] 'und' B [i]'. Überprüfen Sie, ob entweder "Y" oder "B" "None" ist. –

+0

der Fehler wird 'Y [i]' oder 'B [i]' verursacht und hat nichts mit 'sigmoid (z) zu tun' – AlexG

+0

l hat meinen Beitrag aktualisiert – heisen

Antwort

1

Das Problem ist in diesen beiden Linien:

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

Beide Y und Yp Listen sind und daher .append Arbeiten an Ort und Stelle, so dass diese Listen aktualisiert werden. Aber die .append selbst gibt None zurück, so dass Sie in der zweiten Iteration Ihrer Schleife nicht mehr mit den Listen arbeiten.

Verwendung:

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

statt.

Dieser kleine Schnipsel zeigt den Unterschied:

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

>>> print(a) 
[1, 2] 
>>> print(b) 
None 
Verwandte Themen