Ich erstelle eine benutzerdefinierte Verlust in Keras. Nehmen wir an, dass wir die folgenden haben:Mit benutzerdefinierten Verlust und Vorhersage in Keras
def a_loss(X):
a, b = X
loss = . . .
return loss
def mean_loss(y_true, y_pred):
return K.mean(y_pred - 0 * y_true)
Und das Modell geht in etwa so:
.
.
.
z1 = Dense(shape1, activation="linear")(conv_something)
z2 = Dense(shape1, activation="linear")(conv_something2)
loss = a_loss([z1, z2])
model = Model(
inputs=[input1, input2, ..],
outputs=[loss])
model.compile(loss=mean_loss,optimizer=Adam())
nun dieses hypothetische Modell compines normal. Aber wenn ich die trainierten Modell zu verwenden, etwas vorherzusagen, ich bin mit:
model.predict(X_dictionary)
Ich gehe davon aus, dass die Ausgabe der oben genannten ist die loss
(Ausgabe von a_loss
Funktion) .RIGHT? Wenn mich das nicht korrigiert.
Was ich für die Ausgabe von model.predict
möchte, ist die z2
. Suche in der API u mehrere Ausgänge verwenden können:
model = Model(
inputs=[sequence_input_desc, sequence_input_title_positive, sequence_input_title_negative],
outputs=[loss, z2]
)
Aber die oben trainieren, um sowohl loss
und z2
zu minimieren. Was ich will, ist nur zu trainieren, loss
zu minimieren und die Vorhersagefunktion z2
auszugeben. Eine Möglichkeit, das Dokument zu überprüfen, ist die Verwendung in der compile
, aber es funktioniert nicht. Es gibt den Fehler aus The model expects 2target arrays, but only received one array. Found: array with shape ..
Eine Idee, wie es geht?
Sie meinen, dass kurz nach 'model.fit (x, y ..)' kann ich zuweisen 'model2 = Model (eingaben = [input1, ..], outputs = [z2])' und das 'model2' wird die Gewichte des trainierten "Modells" erben? Oder muss ich die Architektur des Modells neu schreiben und nach Aufruf 'Model' mit dem anderen Ausgang? –
Wenn Sie die "Architektur" (die Layer) neu definieren, werden Sie die Gewichte verlieren. Sie müssen nur ein neues Modell definieren, wie ich in der Antwort gezeigt habe. – nemo
ja. Ich finde es heraus, indem ich später die Ausgabe der Gewichte teste. Danke. –