Tensorflow Keras Verbund Modell

stimmen
0

Ich möchte ein Modell machen von anderen Modellen zusammengesetzt, die Strategien verschiedener Trainings unterstützt. Die Hauptziele sind:

  • Ein Modell für die Eingabe , die eine spezifizierte hat input_shape, ein paar Schichten, und eine einzelne Ausgangsschicht
  • Dann N zusätzliche Modelle alle mit dem Eingang verbunden Modell
  • Ein weiteres Modell, das die oben kleineren Modelle in ein großen Multi-Output-Modell komponiert

Ich könnte natürlich bauen gerade dies als ein großes Modell, aber ich habe eine bestimmte Reihe von Training Experimenten würde ich mein zusammengesetztes Modell gerne unterstützen:

  • Trainieren Sie das gesamte Netzwerk zusammen
  • Zug 1 zu N Ausgängen
    • Nur bestimmte Pfade zu bewirken, sondern ändert den ganzen Weg durch das Eingabemodell propagieren
    • Unterstützung der Ausbildung der Untermodelle auf ihre eigenen (die, warum ich dies als ein Verbund aus anderen Modellen gegenüber einem großen zu bauen gedacht)

In Pseudo-Code:

def build_model_a(input_layer):
    ... build model a using input_layer arg as input...
    model = Model(inputs=input_layer,
                  outputs=output_layer)
    model.compile(...)
    return model




input_model = build_input_model(args)
model_a = build_model_a(input_model.output)
model_b = build_model_b(input_model.output)

composite_model = Model(inputs=input_model.input,
                        outputs=[model_a.output,
                                 model_b.output])

# train from input_model through model_a but don't change model_b weights
model_b.trainable = False
composite_model.fit(...)

# train from input_model through model_b but don't change model_a weights
model_a.trainable = False
model_b.trainable = True
composite_model.fit(...)

# train from input_model through model_a but don't change model_b weights
model_b.trainable = True
model_a.trainable = True
composite_model.fit(...)

# Train just input_model
input_model.fit(...)

# Eval through entire model
composite_model.predict(xs)

Das ist mein aktueller Ansatz, der zu einem Fehler führt mit:

AttributeError: 'Model' object has no attribute '_name'

Das macht mich denke, ich bin nicht darüber gehen richtig so für andere Ratschläge oder Hinweise Ich hoffe. Ich bin ziemlich sicher, dass diese mit Keras funktionalen API getan werden kann, aber ich kämpfen, es richtig zu machen.

Ich bin auch nicht klar, ob mit diesem Ansatz mit trainable = False, erlaubt ist. Basierend auf den Warnungen des fit Lauf Ich brauche diese Modelle neu zu kompilieren , nachdem die trainierbar Einflaggung ...

Veröffentlicht am 08/11/2018 um 00:04
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Zumindest für den ersten Teil der Frage, können Sie Modelle verwenden als Schichten die funktionelle api verwenden, nicht ihre Eingänge verwenden, Ausgänge. Etwas wie das:

# creation of a model
def build_model_a():
    ... build model create your own input...
    input_layer = Input(shape=i_shape)
    model = Model(inputs=input_layer,
                  outputs=output_layer)
    model.compile(...)
    return model

# model creations
input_model = build_input_model(args)
model_a = build_model_a()
model_b = build_model_b()

#connect models
input_layer = Input(shape=i_shape)
middle = input_model(input_layer)
out_a = model_a(middle )
out_b = model_b(middle )

composite_model = Model(inputs=input_layer ,
                        outputs=[out_a ,
                                 out_b ])

Vielleicht kann jemand die Antwort vervollständigen, oder Sie werden selbst testen können

Beantwortet am 08/11/2018 um 10:46
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more