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
Es sieht aus wie 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

Schreibe einen Kommentar