前言
本文主要介紹在TensorFlow2 中使用Keras API保存整個模型,以及如果使用保存好的模型,保存整個模型時,有兩種格式可以實作,分別是SaveModel和HDF5;在TF2.x中默認使用SavedModel格式,
文章分為簡約版、實踐版、代碼版,首先從簡約版認識基本流程、要點、代碼等;再到實踐版查看每一步的代碼除錯結果;最后通過代碼版,可以自己嘗試實踐,
簡約版
一、HDF5格式
HDF5標準提供了一種基本保存模型格式,也是常見的模型xxx.h5;通過HDF5格式會保存整個模型的權值值、模型的架構、模型的訓練配置、優化器及狀態等,
使用model.save() 保存,使用tf.keras.models.loda_model加載模型;
首先安裝一下相關的依賴庫,執行如下命令即可:
pip install pyyaml h5py
1.1)保存模型
# 創建并訓練一個新的模型實體
model = create_model()
model.fit(train_images, train_labels, epochs = 5)
# 以HDF5 格式保存模型,保存后是xxx.h5的檔案
model.save("my_model.h5")
1.2)加載使用模型
加載模型:
# 重新創建完成相同的模型,包括權值和優化程式等
new_model = tf.keras.models.load_model("my_model.h5")
# 查看模型的結構
new_model.summary()
檢查其準確率(accuracy):
loss, acc = new_model.evaluate(test_images, test_labels, verbose = 2)
print("評估保存好的模型 準確率:{:5.2f}%".format(100 * acc))
二、SavedMode格式
SavedModel格式是序列化模型的一種方法,是一個包含Protobuf二進制檔案和Tensorflow檢查點(checkpoint)的目錄;
SavedModel格式也是使用model.save() 保存模型,使用tf.keras.models.loda_model加載模型;這種方式于Tensorflow Serving兼容,
2.1)保存模型
創建并訓練一個新的模型實體,然后把訓練好模型保存在saved_model 目錄下,保存模型的名稱為:my_model
# 創建并訓練一個新的模型實體,
model = create_model()
model.fit(train_images, train_labels, epochs = 5)
# 以SavedModel格式保存整個模型
model.save("saved_model/my_model")
SavedModel 格式是一個包含 protobuf 二進制檔案和 Tensorflow 檢查點(checkpoint)的目錄,檢查保存的模型目錄:
# 首先查看 保存模型的目錄saved_model下有那些檔案
ls saved_model
# 查看我們剛才保存的模型my_model
ls saved_model/my_model
能看到一個assets檔案夾,saved_model.pd,和變數檔案夾,
2.2)加載使用模型
加載保存好的模型:
new_model = tf.keras.models.load_model("saved_model/my_model")
# 看到模型的結構
new_model.summary()
使用模型:
# 評估模型
loss, acc = new_model.evaluate(test_images, test_labels, verbose = 2)
print("評估保存好的模型 準確率:{:5.2f}%".format(100 * acc))
實踐版
一、HDF5格式
HDF5標準提供了一種基本保存模型格式,也是常見的模型xxx.h5;通過HDF5格式會保存整個模型的權值值、模型的架構、模型的訓練配置、優化器及狀態等,
首先安裝一下相關的依賴庫,執行如下命令即可:
pip install pyyaml h5py
1.1)保存模型
1.2)加載使用模型
加載模型:

檢查其準確率(accuracy):

二、SavedMode格式
SavedModel格式是序列化模型的一種方法,是一個包含Protobuf二進制檔案和Tensorflow檢查點(checkpoint)的目錄;
其使用model.save() 保存,使用tf.keras.models.loda_model加載模型;這種方式于Tensorflow Serving兼容,
2.1)保存模型
創建并訓練一個新的模型實體,然后把訓練好模型保存在saved_model 目錄下,保存模型的名稱為:my_model

SavedModel 格式是一個包含 protobuf 二進制檔案和 Tensorflow 檢查點(checkpoint)的目錄,檢查保存的模型目錄:

能看到一個assets檔案夾,saved_model.pd,和變數檔案夾,
2.2)加載使用模型
加載保存好的模型:

使用模型:

代碼版
HDF5格式:
# 匯入Tensorflow和依賴項
import os
import tensorflow as tf
from tensorflow import keras
# 獲取示例資料集,使用 MNIST 資料集,主要使用使用前1000個示例
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_labels = train_labels[:1000]
test_labels = test_labels[:1000]
train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0
# 定義模型,首先構建一個簡單的序列(sequential)模型
# 定義一個簡單的序列模型
def create_model():
model = tf.keras.models.Sequential([
keras.layers.Dense(512, activation='relu', input_shape=(784,)),
keras.layers.Dropout(0.2),
keras.layers.Dense(10)
])
model.compile(optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
return model
# 創建并訓練一個新的模型實體
model = create_model()
model.fit(train_images, train_labels, epochs = 5)
# 以HDF5 格式保存模型,保存后是xxx.h5的檔案
model.save("my_model.h5")
# 重新創建完成相同的模型,包括權值和優化程式等
new_model = tf.keras.models.load_model("my_model.h5")
# 查看模型的結構
new_model.summary()
loss, acc = new_model.evaluate(test_images, test_labels, verbose = 2)
print("評估保存好的模型 準確率:{:5.2f}%".format(100 * acc))
SavedMode格式:
# 匯入Tensorflow和依賴項
import os
import tensorflow as tf
from tensorflow import keras
# 獲取示例資料集,使用 MNIST 資料集,主要使用使用前1000個示例
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_labels = train_labels[:1000]
test_labels = test_labels[:1000]
train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0
# 定義模型,首先構建一個簡單的序列(sequential)模型
# 定義一個簡單的序列模型
def create_model():
model = tf.keras.models.Sequential([
keras.layers.Dense(512, activation='relu', input_shape=(784,)),
keras.layers.Dropout(0.2),
keras.layers.Dense(10)
])
model.compile(optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
return model
# 創建并訓練一個新的模型實體,
model = create_model()
model.fit(train_images, train_labels, epochs = 5)
# 以SavedModel格式保存整個模型
model.save("saved_model/my_model")
new_model = tf.keras.models.load_model("saved_model/my_model")
# 看到模型的結構
new_model.summary()
# 評估模型
loss, acc = new_model.evaluate(test_images, test_labels, verbose = 2)
print("評估保存好的模型 準確率:{:5.2f}%".format(100 * acc))
print(new_model.predict(test_images).shape)
小結
保存整個模型時,有兩種方式實作,分別是SaveModel和HDF5;兩種都是使用model.save() 保存模塊,使用tf.keras.models.loda_model加載模型;
HDF5格式 保存模型后,生成xxx.h5,比較常用,
SavedModel格式 保存模型后,是一個包含Protobuf二進制檔案和Tensorflow檢查點(checkpoint)的目錄;
加油加油~~ 歡迎交流呀
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/281229.html
標籤:其他

