Я обучил автоэнкодеру и сохранил его, используя встроенный в save () метод keras.Теперь я хочу разделить его на две части: кодировщик и декодер.Я могу успешно загрузить модель и получить часть кодировщика, создав новую модель, используя старую модель:
encoder_model = keras.models.Model(inputs=self.model.input,
outputs=self.model.get_layer(layer_of_activations).get_output_at(0))
Однако, если я попытаюсь сделать альтернативную вещь с декодером, я не смогу.Я попробовал это, используя различные методы, ни один из которых не был правильным.Затем я обнаружил похожую проблему здесь ( Keras, заменяющий входной слой ) и попытался использовать этот метод, используя следующий код:
for i, l in enumerate(self.model.layers[0:19]):
self.model.layers.pop(0)
newInput = Input(batch_shape=(None, None, None, 64))
newOutputs = self.model(newInput)
newModel = keras.models.Model(newInput, newOutputs)
Форма вывода последнего слоя, который я удаляю, - (Нет,Нет, Нет, 64), но этот код выдает следующую ошибку:
ValueError: number of input channels does not match corresponding dimension of filter, 64 != 3
Я предполагаю, что это потому, что входные размеры модели не обновляются после выталкивания исходных слоев, что отмечено в первом вопросе этого вопроса.ответ, второй комментарий: Keras, заменяющий входной слой
Простое зацикливание слоев и воссоздание их в новой модели не работает, так как моя модель не последовательная.