Этот вопрос похож на Керас, заменяющий входной слой .
У меня есть сеть классификатора и сеть автоэнкодера, и я хочу использовать выходные данные автоэнкодера (т.е. кодирование + декодирование, как этап предварительной обработки) в качестве входных данных для классификатора - но после того, как классификатор уже был обучен на обычном данные.
Сеть классификации была построена с помощью функционального API, подобного этому (на основе этот пример ):
clf_input = Input(shape=(28,28,1))
clf_layer = Conv2D(...)(clf_input)
clf_layer = MaxPooling2D(...)(clf_layer)
...
clf_output = Dense(num_classes, activation='softmax')(clf_layer)
model = Model(clf_input, clf_output)
model.compile(...)
model.fit(...)
И такой автоматический кодер (на основе этот пример ):
ae_input = Input(shape=(28,28,1))
x = Conv2D(...)(ae_input)
x = MaxPooling2D(...)(x)
...
encoded = MaxPooling2D(...)(x)
x = Conv2d(...)(encoded)
x = UpSampling2D(...)(x)
...
decoded = Conv2D(...)(x)
autoencoder = Model(ae_input, decoded)
autoencoder.compile(...)
autoencoder.fit(...)
Я могу объединить две модели следующим образом (мне все еще нужны оригинальные модели, следовательно, копирование):
model_copy = keras.models.clone_model(model)
model_copy.set_weights(model.get_weights())
# remove original input layer
model_copy.layers.pop(0)
# set the new input
new_clf_output = model_copy(decoded)
# get the stacked model
stacked_model = Model(ae_input, new_clf_output)
stacked_model.compile(...)
И это прекрасно работает, когда все, что я хочу сделать, это применить модель к новым тестовым данным, но выдает ошибку примерно так:
for layer in stacked_model.layers:
print layer.get_config()
, где он достигает конца автокодера, но затем завершается ошибкой с KeyError в точке, где модель классификатора получает свой ввод. Также при построении модели с keras.utils.plot_model
я получаю это:
, где вы можете видеть слои автоэнкодера, но затем, в конце, вместо отдельных слоев из модели классификатора, в одном блоке есть только полная модель.
Есть ли способ соединить две модели так, чтобы новая сложенная модель фактически состояла из всех отдельных слоев?