Sind Sie auf der Suche nach so etwas?
import keras.backend as K
import numpy as np
val = np.random.random((4, 2, 3))
t = K.variable(value=val)
t1 = t[0, :, :]
t2 = t[1, :, :]
t3 = t[2, :, :]
t4 = t[3, :, :]
print('t1:\n', K.eval(t1))
print('t2:\n', K.eval(t2))
print('t3:\n', K.eval(t3))
print('t4:\n', K.eval(t4))
print('t:\n', K.eval(t))
Es gibt die folgende Ausgabe:
t1:
[[ 0.18787734 0.1085723 0.01127671]
[ 0.06032621 0.14528386 0.21176969]]
t2:
[[ 0.34292713 0.56848335 0.83797884]
[ 0.11579451 0.21607392 0.80680907]]
t3:
[[ 0.1908586 0.48186591 0.23439431]
[ 0.93413448 0.535191 0.16410089]]
t4:
[[ 0.54303145 0.78971165 0.9961108 ]
[ 0.87826216 0.49061012 0.42450914]]
t:
[[[ 0.18787734 0.1085723 0.01127671]
[ 0.06032621 0.14528386 0.21176969]]
[[ 0.34292713 0.56848335 0.83797884]
[ 0.11579451 0.21607392 0.80680907]]
[[ 0.1908586 0.48186591 0.23439431]
[ 0.93413448 0.535191 0.16410089]]
[[ 0.54303145 0.78971165 0.9961108 ]
[ 0.87826216 0.49061012 0.42450914]]]
Man beachte, dass jetzt t1, t2, t3, t4
von shape(2,3)
ist.
print(t1.shape.eval()) # prints [2 3]
Also, wenn Sie die 3D-Form behalten möchten, müssen Sie Folgendes tun:
t1 = t[0, :, :].reshape((1, 2, 3))
t2 = t[1, :, :].reshape((1, 2, 3))
t3 = t[2, :, :].reshape((1, 2, 3))
t4 = t[3, :, :].reshape((1, 2, 3))
Nun Sie die aufgespießt Tensoren in der richtigen Dimension bekommen.
print(t1.shape.eval()) # prints [1 2 3]
Ich hoffe, dass es Ihnen helfen wird, Ihr Problem zu lösen.
Ich war eigentlich auf der Suche nach etwas, das zu einer Split/Slice-Schicht analog ist. Aber ich denke, ich muss so etwas mit einer Lambda-Ebene verwenden, wenn ich dafür keine eigene Ebene schreiben möchte. Danke –
besten Weg zu danken ist durch die Annahme der Antwort. Übrigens, soweit ich weiß, ist Split-Layer in Keras in Entwicklung. aber ja, Sie können Lambda-Layer verwenden. Ich habe kein Beispiel mit Lambda-Layer angegeben, weil ich immer daran glaube, die Dinge einfach zu halten. Also dachte ich, du wirst dein Ziel erreichen, indem du meine Antwort änderst :) –