Сохраните и загрузите keen autoencoder - PullRequest
0 голосов
/ 02 июля 2018

Посмотрите на эту странную ситуацию загрузки / сохранения модели. Я сохранил модель вариационного автоэнкодера и его кодировщик и декодер:

autoencoder.save("autoencoder_save", overwrite=True)
encoder.save("encoder_save", overwrite=True)
decoder.save("decoder_save", overwrite=T)

После этого я загрузил все это с диска:

autoencoder_disk = load_model("autoencoder_save", custom_objects={'KLDivergenceLayer': KLDivergenceLayer,
                                                       'nll': nll})
encoder_disk = load_model("encoder_save", custom_objects={'KLDivergenceLayer': KLDivergenceLayer,
                                                       'nll': nll})
decoder_disk = load_model("decoder_save", custom_objects={'KLDivergenceLayer': KLDivergenceLayer,
                                                       'nll': nll})

Если я попытаюсь

x_test_encoded = encoder_disk.predict(x_test,batch_size=batch_size)
x_test_decoded = decoder_disk.predict(x_test_encoded)
print(np.round(x_test_decoded[3]))

Все работает отлично, как будто я использую кодер / декодер из памяти, но если я попробую

vae = autoencoder_disk.predict(x_test_encoded) 

Я получил

ValueError: Error when checking model : the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s) but instead got the following list of 1 arrays:...

хотя я могу предсказать из вариационного автоэнкодера по памяти. Почему автоэнкодер не работает при загрузке с диска?

1 Ответ

0 голосов
/ 02 июля 2018

Вы передаете закодированный вывод x_test_encoded в качестве входа в автоэнкодер autoencoder_disk.predict(x_test_encoded). Вы должны передать исходный ввод, который кодер ожидает вместо x_test.

...