Dieser Beitrag scheint darauf hinzudeuten, dass das, was ich erreichen möchte, nicht möglich ist. Davon bin ich jedoch nicht überzeugt - angesichts dessen, was ich bereits getan habe, verstehe ich nicht, warum das, was ich tun möchte, nicht erreicht werden kann ...
Ich habe zwei Bilddatensätze, von denen einer Bilder mit Form (480, 720, 3) und der andere Bilder mit Form (540, 960, 3) enthält.
Ich habe ein Modell mit dem folgenden Code initialisiert:
input = Input(shape=(480, 720, 3), name='image_input')
initial_model = VGG16(weights='imagenet', include_top=False)
for layer in initial_model.layers:
layer.trainable = False
x = Flatten()(initial_model(input))
x = Dense(1000, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
x = Dense(1000, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
x = Dense(14, activation='linear')(x)
model = Model(inputs=input, outputs=x)
model.compile(loss='mse', optimizer='adam', metrics=['mae'])
Nachdem ich dieses Modell für das vorherige Dataset trainiert habe, möchte ich die Eingabe-Tensor-Ebene entfernen und dem Modell einen neuen Eingabe-Tensor voranstellen, dessen Form mit den Bildabmessungen des letzten Datasets übereinstimmt.
model = load_model('path/to/my/trained/model.h5')
old_input = model.pop(0)
new_input = Input(shape=(540, 960, 3), name='image_input')
x = model(new_input)
m = Model(inputs=new_input, outputs=x)
m.save('transfer_model.h5')
was diesen Fehler ergibt:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2506, in save
save_model(self, filepath, overwrite, include_optimizer)
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/models.py", line 106, in save_model
'config': model.get_config()
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2322, in get_config
layer_config = layer.get_config()
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2370, in get_config
new_node_index = node_conversion_map[node_key]
KeyError: u'image_input_ib-0'
In dem von mir verknüpften Beitrag gibt maz an, dass es eine Dimensionsinkongruenz gibt, die verhindert, dass die Eingabeebene eines Modells geändert wird. Wenn dies der Fall ist, wie setze ich dann eine Eingabeebene (480, 720, 3) voran des VGG16-Modells, das (224, 224, 3) Bilder erwartet?
Ich denke, ein wahrscheinlicheres Problem ist, dass die Ausgabe meines früheren Modells etwas anderes erwartet als das, was ich basierend auf dem, was fchollet in diesem Beitrag sagt, gebe . Ich bin syntaktisch verwirrt, aber ich glaube, das gesamte x = Layer()(x)
Segment baut die Ebene Stück für Stück aus Eingabe-> Ausgabe auf, und wenn Sie einfach eine andere Eingabe voranstellen, wird sie unterbrochen.
Ich habe aber wirklich keine Ahnung ...
Kann mir jemand bitte erklären, wie ich das erreichen kann, was ich versuche, oder, wenn es nicht möglich ist, mir erklären, warum nicht?