Python tuple indices must be integers, nicht Tupel?
So, ich bin mir nicht ganz sicher, was hier vorgeht, aber aus welchem Grund auch immer Python ist wirft bei mir. Für die Referenz, es ist Teil eines kleinen neuronalen Netzes im Gebäude, die für Spaß, aber es nutzt eine Menge von np.array und so, es gibt eine Menge von Matrizen, die Gegend geworfen, so dass ich denke, es schafft eine Art von Datentyp clash. Vielleicht jemand kann mir helfen, dies herauszufinden, denn ich hab schon starrte an diesen Fehler zu lange, ohne in der Lage, es zu beheben.
#cross-entropy error
#y is a vector of size N and output is an Nx3 array
def CalculateError(self, output, y):
#calculate total error against the vector y for the neurons where output = 1 (the rest are 0)
totalError = 0
for i in range(0,len(y)):
totalError += -np.log(output[i, int(y[i])]) #error is thrown here
#now account for regularizer
totalError+=(self.regLambda/self.inputDim) * (np.sum(np.square(self.W1))+np.sum(np.square(self.W2)))
error=totalError/len(y) #divide ny N
return error
EDIT: Hier die Funktion, gibt die Ausgabe, so dass Sie wissen, wo das herkommt. y ist ein Vektor der Länge 150, stammt direkt aus einem text-Dokument. bei jedem index von y es enthält einen index entweder 1,2, oder 3:
#forward propogation algorithm takes a matrix "X" of size 150 x 3
def ForProp(self, X):
#signal vector for hidden layer
#tanh activation function
S1 = X.dot(self.W1) + self.b1
Z1 = np.tanh(S1)
#vector for the final output layer
S2 = Z1.dot(self.W2)+ self.b2
#softmax for output layer activation
expScores = np.exp(S2)
output = expScores/(np.sum(expScores, axis=1, keepdims=True))
return output,Z1
output
ist nicht wirklich eine Nx4-array, wie Sie denken, es ist.Bitte geben Sie die vollständige trackback.
Wie können Sie garantieren, dass y[i] in den Bereich [0,3] ? Das scheint Ihr problem. Dies ist entweder auf einen offensichtlichen Fehler oder ein Wundpflaster, das muss behoben in der Architektur.
und was tun Sie mit dem Ergebnis der
ForProp
? es gibt ein Tupel, Sie wahrscheinlich sind vorbei, was produziert wird, welche Tupel bestehend aus output
und Z1
ich vermute, Sie haben so etwas wie output = ForProp( .. )
während es sein sollte output, Z1 = ForProp( ... )
InformationsquelleAutor Scorch | 2016-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
output
variable ist nicht einN x 4
matrix, zumindest nicht in python-Arten Sinn. Es ist ein Tupel, die können nur indiziert werden, durch eine einzelne Zahl, und Sie versuchen, den index durch den Tupel (2 zahlen mit Koma dazwischen), das funktioniert nur für numpy-Matrizen. Print-Ausgabe, herauszufinden, wenn das problem nur einen geben (dann einfach konvertieren np.array) oder wenn Sie auf der Durchreise sind und etwas völlig anderes (dann beheben, was produziertoutput
).Beispiel dafür, was passiert ist:
InformationsquelleAutor lejlot