2017-05-09 9 views
0

Ich versuche hier eine einfache Matrix zu erstellen, die für jede Probe in meinem Batch wiederholt wird. HierKeras backend.repeat_elements funktioniert nicht?

ist die Matrix:

balanceMatrix = np.array([[[5,10,10],[1,1,1],[1,1,1]]]) 
print(balanceMatrix.shape) 

balanceMatrix = K.constant(balanceMatrix) 
print(K.shape(balanceMatrix).eval()) 

So weit, so gut, ich habe die erwartete Matrix geformt (1,3,3). Nun möchte ich es für jede Probe in der Charge (sagen wir 60000 Proben) wiederholen. Von keras documentation, alles, was ich tun sollte, ist dies:

balanceMatrix = K.repeat_elements(balanceMatrix, 60000,axis=0) 
print(K.shape(balanceMatrix).eval()) 

Aber dies wirft die folgenden Fehler, die ich nicht einfach zu verstehen:

IndexError        Traceback (most recent call last) 
<ipython-input-28-4356baf13de8> in <module>() 
    20 balanceMatrix = K.constant(balanceMatrix) 
    21 print(K.shape(balanceMatrix).eval()) 
---> 22 balanceMatrix = K.repeat_elements(balanceMatrix, 60000,axis=0) 
    23 print(K.shape(balanceMatrix).eval()) 
    24 

c:\users\ut65\appdata\local\programs\python\python35\lib\site-packages\keras\backend\theano_backend.py in repeat_elements(x, rep, axis) 
    743  if hasattr(x, '_keras_shape'): 
    744   y._keras_shape = list(x._keras_shape) 
--> 745   repeat_dim = x._keras_shape[axis] 
    746   if repeat_dim is not None: 
    747     y._keras_shape[axis] = repeat_dim * rep 

IndexError: tuple index out of range 

Was ist los ?? Ich weiß, ich kann das mit np.repeat(balanceMatrix,60000,axis=0) zuerst tun und dann den Keras Tensor erstellen, aber sollte nicht die Keras-Option auch funktionieren?

Antwort

1

Ich glaube K.variable würde hier helfen:

balanceMatrix = K.variable(value=balanceMatrix) 
+0

Thanks :) - Weißt du, warum? --- Nach dem Testen ist die Option numpy viel schneller ... –

+0

@Daniel Entschuldigung Ich war unterwegs und konnte nicht viel in mein Handy schreiben:/Ich kenne den genauen Grund nicht, aber ich hatte ein identisches Problem in der Vergangenheit. Meine Vermutung wäre, dass Keras versucht, die Struktur * inplace * zu wiederholen und eine Konstante zu verwenden, die es zum Absturz bringt (nicht sicher, tho). Und ja, für diese Operationen, die Wiederholungsstrukturen sind, wird numpy fast immer schneller sein. Jedoch sollte die Wiederholung in numpy und dann alles zu Keras zu bewegen ähnliche Leistung haben, die sich zu Keras bewegt und dann darin wiederholt (für eine genügend große Wiederholungen). –

Verwandte Themen