請教autoencoder載入訓練好的模型?

各位前輩好
最近自學AI.使用Anaconda 的spyder .python語法真的好用的過份
從網路部落格找了2個簡單簡短的教學例子,
第一個例子是用深度學習找出溫度華氏轉攝氏的最接近的函式,訓練ok.儲存模型ok,載入模型也可以順利執行溫度換算正確

第二個例子是autoencoder 手寫0-9的小圖片例子,有下載訓練用的圖集,訓練ok,顯示也ok.
我將訓練好的模型存好後,要載入使用它…修改幾次仍試不出來.因為它包含encoder與decoder.
不知道該怎麼處理這一塊. 請大大指點迷津. 謝謝

程式來源
深度學習筆記(8):Autoencoder自編碼器(AE). https://colab.research.google.com/drive/… | by Yanwei Liu | Medium

import numpy as np
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Dense, Input

import pickle

指定亂數種子

seed = 7
np.random.seed(seed)

載入資料集

(X_train, _), (X_test, _) = mnist.load_data()

轉換成 28*28 = 784 的向量

X_train = X_train.reshape(X_train.shape[0], 2828).astype(“float32”)
X_test = X_test.reshape(X_test.shape[0], 28
28).astype(“float32”)

因為是固定範圍, 所以執行正規化, 從 0-255 至 0-1

X_train = X_train / 255
X_test = X_test / 255

定義 autoencoder 模型

input_img = Input(shape=(784,))
x = Dense(128, activation=“relu”)(input_img)
encoded = Dense(64, activation=“relu”)(x)
x = Dense(128, activation=“relu”)(encoded)
decoded = Dense(784, activation=“sigmoid”)(x)
autoencoder = Model(input_img, decoded)
autoencoder.summary() # 顯示模型摘要資訊

定義 encoder 模型

encoder = Model(input_img, encoded)
encoder.summary() # 顯示模型摘要資訊

定義 decoder 模型

decoder_input = Input(shape=(64,))
decoder_layer = autoencoder.layers-2
decoder_layer = autoencoder.layers-1
decoder = Model(decoder_input, decoder_layer)
decoder.summary() # 顯示模型摘要資訊

編譯模型

autoencoder.compile(loss=“binary_crossentropy”, optimizer=“adam”,
metrics=[“accuracy”])

訓練模型

autoencoder.fit(X_train, X_train, validation_data=(X_test, X_test),
epochs=10, batch_size=256, shuffle=True, verbose=2)

#將模型儲存起來
with open(‘my_model’,‘wb’) as f:
pickle.dump(autoencoder,f)

saving whole model

autoencoder.save(‘autoencoder_model.h5’)

壓縮圖片

encoded_imgs = encoder.predict(X_test)

解壓縮圖片

decoded_imgs = decoder.predict(encoded_imgs)

顯示原始, 壓縮和還原圖片

import matplotlib.pyplot as plt
n = 10 # 顯示幾個數字
plt.figure(figsize=(20, 6))
for i in range(n):
# 原始圖片
ax = plt.subplot(3, n, i + 1)
ax.imshow(X_test[i].reshape(28, 28), cmap=“gray”)
ax.axis(“off”)
# 壓縮圖片
ax = plt.subplot(3, n, i + 1 + n)
ax.imshow(encoded_imgs[i].reshape(8, 8), cmap=“gray”)
ax.axis(“off”)
# 還原圖片
ax = plt.subplot(3, n, i + 1 + 2*n)
ax.imshow(decoded_imgs[i].reshape(28, 28), cmap=“gray”)
ax.axis(“off”)
plt.show()