Warum zeigt Keras.backend.flatten nicht richtige Dimension? Ich habe folgende:Problem mit Keras Backend flatten
x ist < tf.Tensor 'concat_8: 0' shape = (?, 4, 8, 62) dtype = float32 >
After:
Keras.backend.flatten(x)
x wird : < tf.Tensor 'Reshape_22: 0' shape = (?,) dtype = float32 >
Warum ist x nicht die Form = (?, 4 * 8 * 62)
EDIT-1
ich, wenn ich batch_flatten
(branch3x3
& branch5x5
unten sind Tensoren aus früheren Faltungen) (?,?):
x = Lambda(lambda v: K.concatenate([v[0], v[1]], axis=3))([branch3x3, branch5x5])
x = Lambda(lambda v: K.batch_flatten(v))(x)
Ergebnis ersten Lambda ist < tf .Tensor 'lambda_144/concat: 0' Form = (?, 4, 8, 62) dtype = float32>
Ergebnis des zweiten Lambdas ist < tf.Tensor 'lambda_157/Reshape: 0' shape = (?,?) Dtype = float32>
EDIT-2
batch_flatten
versucht, aber stromabwärts einen Fehler, wenn ich die Modell-Ausgabe bauen (mit reshape
anstelle von batch_flatten
scheint zu funktionieren). branch3x3
ist < tf.Tensor 'conv2d_202/Elu: 0' Form = (?, 4, 8, 30) dtype = float32> und branch5x5
ist < tf.Tensor 'conv2d_203/Elu: 0' Form = (?, 4, 8, 32) dtype = float32>:
from keras import backend as K
x = Lambda(lambda v: K.concatenate([v[0], v[1]], axis=3))([branch3x3, branch5x5])
x = Lambda(lambda v: K.batch_flatten(v))(x)
y = Conv1D(filters=2, kernel_size=4)(Input(shape=(4, 1)))
y = Lambda(lambda v: K.batch_flatten(v))(y)
z = Lambda(lambda v: K.concatenate([v[0], v[1]], axis=1))([x, y])
output = Dense(32, kernel_initializer=TruncatedNormal(), activation='linear')(z)
cnn = Model(inputs=[m1, m2], outputs=output)
output
die Anweisung führt zu dem folgenden Fehler für die kernel_initializer
: Typeerror: Fehler Objekt vom Typ Tensor zu konvertieren. Inhalt: (Keine, 32). Erwägen Sie, Elemente auf einen unterstützten Typ zu übertragen.
Bitte prüfen Sie, ob Ihr Code ausführbar ist, bevor Sie ihn veröffentlichen. Es ist schwierig, den Fehler zu reproduzieren, wenn der Code falsch ist. Sie rufen 'K.concatenate ([v [0], v [1], v [2]], axis = 3)' mit nur zwei Eingaben '[branch3x3, branch5x5]'. –
Gibt es auch einen Grund, 'Lambda'-Layer anstelle der in Keras implementierten' Concatenate'- und 'Flatten'-Layer zu verwenden? –
Sorry, das war ein Tippfehler. Mein wirklicher Code ist länger, also habe ich ihn hier weggelassen, um mich auf die Hauptprobleme zu konzentrieren. Ich benutze die Lambda-Ebene für die Erstellung des Modells auf der Grundlage Ihrer Beratung in https://stackoverflow.com/questions/45309236/keras-backend-modeling-issue (hatte ein ähnliches Problem wie in diesem Fall) – csankar69