keras mit Ausgabe der Zwischenschicht
Ich trainiere ein Modell Ein und versuchen, den Ausgang der Zwischenschicht mit dem name="layer_x" für zusätzliche Eingabe in Modell B.
Ich habe versucht, die Ausgabe der Zwischenschicht wie auf der keras doc
https://keras.io/getting-started/faq/#how-can-i-obtain-the-output-of-an-intermediate-layer
Modell A:
inputs = Input(shape=(100,))
dnn = Dense(1024, activation='relu')(inputs)
dnn = Dense(128, activation='relu', name="layer_x")(dnn)
dnn = Dense(1024, activation='relu')(dnn)
output = Dense(10, activation='softmax')(dnn)
Modell B:
input_1 = Input(shape=(200,))
input_2 = Input(shape=(100,)) # input for model A
# loading model A
model_a = keras.models.load_model(path_to_saved_model_a)
intermediate_layer_model = Model(inputs=model_a.input,
outputs=model_a.get_layer("layer_x").output)
intermediate_output = intermediate_layer_model.predict(data)
merge_layer = concatenate([input_1, intermediate_output])
dnn_layer = Dense(512, activation="relu")(merge_layer)
output = Dense(5, activation="sigmoid")(dnn_layer)
model = keras.models.Model(inputs=[input_1, input_2], outputs=output)
Wenn ich Debuggen bekomme ich eine Fehlermeldung in dieser Zeile:
intermediate_layer_model = Model(inputs=model_a.input,
outputs=model_a.get_layer("layer_x").output)
File "..", line 89, in set_model
outputs=self.neural_net_asc.model.get_layer("layer_x").output)
File "C:\WinPython\python-3.5.3.amd64\lib\site-packages\keras\legacy\interfaces.py", line 87, in wrapper
return func(*args, **kwargs)
File "C:\WinPython\python-3.5.3.amd64\lib\site-packages\keras\engine\topology.py", line 1592, in __init__
mask = node.output_masks[tensor_index]
AttributeError: 'Node' object has no attribute 'output_masks'
Kann ich den Zugriff auf die Tensor mit get_layer("layer_x").die Ausgabe und die output_mask ist Keine. Muss ich manuell gesetzt eine Ausgabe-Maske und wie richte ich diese Ausgabe Maske, wenn nötig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Dinge, die Sie zu sein scheinen falsch :
wenn Sie
.predict()
Sie sind eigentlich die Weitergabe der Daten durch die Grafik und Fragen, was wird die Folge sein. Wenn Sie das tun, sindintermediate_output
ein numpy-array und nicht eine Ebene, wie Sie möchten, es zu sein.Zweitens, werden Sie nicht brauchen, um neu erstellen eine neue intermediate-Modell. Sie können direkt den Teil der
model_a
, die Sie interessieren.Hier ist ein code "kompiliert" für mich :
Ich hoffe, dass dies ist, was Sie tun wollte.
Bitte sagen Sie mir, wenn etwas nicht klar 🙂