2016-10-03 5 views
0

Also ich bin mir nicht ganz sicher, was hier vor sich geht, aber aus welchem ​​Grund auch immer wirft Python das auf mich. Als Referenz ist es ein Teil eines kleinen neuronalen Netzwerks, das ich zum Spaß erstelle, aber es benutzt eine Menge np.array und so, es werden viele Matrizen herumgeworfen, also denke ich, dass es eine Art Datentyp-Kollision erzeugt . Vielleicht kann mir jemand helfen, das herauszufinden, weil ich diesen Fehler zu lange angeguckt habe, ohne ihn beheben zu können.Python, Tuple-Indizes müssen ganze Zahlen sein, nicht Tupel?

EDIT: Hier ist die Funktion, die die Ausgabe zurückgibt, damit Sie wissen, woher das kam. y ist ein Vektor der Länge 150, der direkt aus einem Textdokument stammt. bei jedem Index von y enthält sie 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 
+1

Es sieht aus wie 'output' ist nicht wirklich ein Nx4 Array wie Sie denken, es ist. – user2357112

+2

Bitte den vollständigen Trackback angeben. –

+1

Wie können Sie garantieren, dass y [i] im Bereich [0,3] liegt? Das scheint dein Problem zu sein. Dies ist entweder ein absoluter Fehler oder ein Bandaid, der in der Architektur behoben werden muss. – Harrichael

Antwort

4

Ihr output Variable ist keine N x 4 Matrix, zumindest nicht in Python Typen Sinn. Es ist ein Tupel, das nur durch eine einzige Nummer indiziert werden kann, und Sie versuchen, durch Tupel (2 Zahlen mit Koma dazwischen) zu indizieren, die nur für numpy Matrizen funktioniert. Drucken Sie Ihre Ausgabe, finden Sie heraus, ob das Problem nur ein Typ ist (dann konvertieren Sie einfach zu np.array) oder wenn Sie etwas komplett anders übergeben (dann reparieren, was produziert output).

Beispiel dessen, was geschieht:

import numpy as np 
output = ((1,2,3,5), (1,2,1,1)) 

print output[1, 2] # your error 
print output[(1, 2)] # your error as well - these are equivalent calls 

print output[1][2] # ok 
print np.array(output)[1, 2] # ok 
print np.array(output)[(1, 2)] # ok 
print np.array(output)[1][2] # ok 
Verwandte Themen