Keras學習筆記二:保存本地模型和調用本地模型


使用深度學習模型時當然希望可以保存下訓練好的模型,需要的時候直接調用,不再重新訓練

一、保存模型到本地

以mnist數據集下的AutoEncoder 去噪為例。添加:

file_path="MNIST_data/weights-improvement-{epoch:02d}-{val_loss:.2f}.hdf5"

tensorboard = TensorBoard(log_dir='/tmp/tb', histogram_freq=0, write_graph=False) checkpoint = ModelCheckpoint(filepath=file_path,verbose=1,monitor='val_loss', save_weights_only=False,mode='auto' ,save_best_only=True,period=1)
autoencoder.fit(x_train_noisy, x_train, epochs
=100, batch_size=128, shuffle=True, validation_data=(x_test_noisy, x_test), callbacks=[checkpoint,tensorboard])

這里的tensorboard和checkpoint分別是

1、啟用tensorboard可視化工具,新建終端使用tensorboard --logdir=/tmp/tb 命令

2、保存ModelCheckpoint到MNIST_data/文件夾下,這里的參數設置為觀察val_loss ,當有提升時保存一次模型,如下

 

二、從本地讀取模型

假設讀取模型后使用三個圖片做去噪實驗:(測試的圖片數量修改 pic_num )

import os
import numpy as np
from warnings import simplefilter
simplefilter(action='ignore', category=FutureWarning)
import matplotlib.pyplot as plt
from keras.models import Model,Sequential,load_model
from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from keras.preprocessing.image import ImageDataGenerator,img_to_array, load_img
from keras.callbacks import TensorBoard , ModelCheckpoint
print("_________________________keras start_____________________________")
pic_num = 3
base_dir = 'MNIST_data' #基准目錄
train_dir = os.path.join(base_dir,'my_test') #train目錄
validation_dir="".join(train_dir)
test_datagen = ImageDataGenerator(rescale= 1./255)
validation_generator  = test_datagen.flow_from_directory(validation_dir,
                                                    target_size = (28,28),
                                                    color_mode = "grayscale",
                                                    batch_size = pic_num,
                                                    class_mode =  "categorical")#利用test_datagen.flow_from_directory(圖像地址,目標size,批量數目,標簽分類情況)
for x_train,batch_labels in validation_generator:
    break
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))
y_train = x_train

# create model
model = load_model('MNIST_data/my_model.hdf5')
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print("Created model and loaded weights from file")

# estimate accuracy on whole dataset using loaded weights
y_train=model.predict(x_train)

n = pic_num
for i in range(n):
    ax = plt.subplot(2, n, i+1)
    plt.imshow(x_train[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    ax = plt.subplot(2, n, i+1+n)
    plt.imshow(y_train[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
plt.show()

迭代67次效果:

參考:

https://keras-zh.readthedocs.io/getting-started/faq/#_3

https://keras-zh.readthedocs.io/models/model/#predict

https://cloud.tencent.com/developer/article/1049579


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM