本文將會介紹如何利用Keras來實現模型的保存、讀取以及加載。
本文使用的模型為解決IRIS數據集的多分類問題而設計的深度神經網絡(DNN)模型,模型的結構示意圖如下:

DNN模型結構圖
具體的模型參數可以參考文章:Keras入門(一)搭建深度神經網絡(DNN)解決多分類問題。
模型保存
Keras使用HDF5文件系統來保存模型。模型保存的方法很容易,只需要使用save()方法即可。
以Keras入門(一)搭建深度神經網絡(DNN)解決多分類問題中的DNN模型為例,整個模型的變量為model,我們設置模型共訓練10次,在原先的代碼中加入Python代碼即可保存模型:
????#?save?model
????print("Saving?model?to?disk?\n")
????mp?=?"E://logs/iris_model.h5"
????model.save(mp)
保存的模型文件(.h5)如下:

模型文件
模型讀取
保存后的.h5以HDF5文件系統的形式儲存,在我們使用Python讀取h5文件里面的數據之前,我們先用HDF5的可視化工具HDFView來查看里面的數據:

我們感興趣的是這個模型中的各個神經層之間的連接權重及偏重,也就是上圖中的紅色部分,里面包含了各個神經層之間的連接權重及偏重,分別位于dense_1,dense_2,dense_3中。藍色部分為dense_3/dense_3/kernel:0的數據,即最后輸出層的連接權重矩陣。
有了對模型參數的直觀認識,我們要做的下一步工作就是讀取各個神經層之間的連接權重及偏重。我們使用Python的h5py這個模塊來這個.h5這個文件。關于h5py的快速入門指南,可以參考文章:h5py快速入門指南()。
使用以下Python代碼可以讀取各個神經層之間的連接權重及偏重數據:
import?h5py
#?模型地址
MODEL_PATH?=?'E://logs/iris_model.h5'
#?獲取每一層的連接權重及偏重
print("讀取模型中...")
with?h5py.File(MODEL_PATH,?'r')?as?f:
????dense_1?=?f['/model_weights/dense_1/dense_1']
????dense_1_bias?=??dense_1['bias:0'][:]
????dense_1_kernel?=?dense_1['kernel:0'][:]
????dense_2?=?f['/model_weights/dense_2/dense_2']
????dense_2_bias?=?dense_2['bias:0'][:]
????dense_2_kernel?=?dense_2['kernel:0'][:]
????dense_3?=?f['/model_weights/dense_3/dense_3']
????dense_3_bias?=?dense_3['bias:0'][:]
????dense_3_kernel?=?dense_3['kernel:0'][:]
print("第一層的連接權重矩陣:\n%s\n"%dense_1_kernel)
print("第一層的連接偏重矩陣:\n%s\n"%dense_1_bias)
print("第二層的連接權重矩陣:\n%s\n"%dense_2_kernel)
print("第二層的連接偏重矩陣:\n%s\n"%dense_2_bias)
print("第三層的連接權重矩陣:\n%s\n"%dense_3_kernel)
print("第三層的連接偏重矩陣:\n%s\n"%dense_3_bias)
輸出的結果如下:
讀取模型中...
第一層的連接權重矩陣:
[[?0.04141677??0.03080632?-0.02768146??0.14334357??0.06242227]
?[-0.41209617?-0.77948487??0.5648218??-0.699587???-0.19246106]
?[?0.6856315???0.28241938?-0.91930366?-0.07989818??0.47165248]
?[?0.8655262???0.72175753??0.36529952?-0.53172135??0.26573092]]
第一層的連接偏重矩陣:
[-0.16441862?-0.02462054?-0.14060321??0.?????????-0.14293939]
第二層的連接權重矩陣:
[[?0.39296603??0.01864707??0.12538083??0.07935872??0.27940807?-0.4565802?]
?[-0.34312084??0.6446907??-0.92546445?-0.00538039??0.95466876?-0.32819661]
?[-0.7593299??-0.07227057??0.20751365??0.40547106??0.35726753??0.8884158?]
?[-0.48096?????0.11294878?-0.29462305?-0.410536???-0.23620337?-0.72703975]
?[?0.7666149??-0.41720924??0.29576775?-0.6328017???0.43118536??0.6589351?]]
第二層的連接偏重矩陣:
[-0.1899569???0.?????????-0.09710662?-0.12964155?-0.26443157??0.6050924?]
第三層的連接權重矩陣:
[[-0.44450542??0.09977101??0.12196152]
?[?0.14334357??0.18546402?-0.23861367]
?[-0.7284191???0.7859063??-0.878823??]
?[?0.0876545???0.51531947??0.09671918]
?[-0.7964963??-0.16435687??0.49531657]
?[?0.8645698???0.4439873???0.24599855]]
第三層的連接偏重矩陣:
[?0.39192322?-0.1266532??-0.29631865]

值得注意的是,我們得到的這些矩陣的數據類型都是numpy.ndarray。
OK,既然我們已經得到了各個神經層之間的連接權重及偏重的數據,那我們能做什么呢?當然是去做一些有趣的事啦,那就是用我們自己的方法來實現新數據的預測向量(softmax函數作用后的向量)。so, really?
新的輸入向量為[6.1, 3.1, 5.1, 1.1],使用以下Python代碼即可輸出新數據的預測向量:
import?h5py
import?numpy?as?np
#?模型地址
MODEL_PATH?=?'E://logs/iris_model.h5'
#?獲取每一層的連接權重及偏重
print("讀取模型中...")
with?h5py.File(MODEL_PATH,?'r')?as?f:
????dense_1?=?f['/model_weights/dense_1/dense_1']
????dense_1_bias?=??dense_1['bias:0'][:]
????dense_1_kernel?=?dense_1['kernel:0'][:]
????dense_2?=?f['/model_weights/dense_2/dense_2']
????dense_2_bias?=?dense_2['bias:0'][:]
????dense_2_kernel?=?dense_2['kernel:0'][:]
????dense_3?=?f['/model_weights/dense_3/dense_3']
????dense_3_bias?=?dense_3['bias:0'][:]
????dense_3_kernel?=?dense_3['kernel:0'][:]
#?模擬每個神經層的計算,得到該層的輸出
def?layer_output(input,?kernel,?bias):
????return?np.dot(input,?kernel)?+?bias
#?實現ReLU函數
relu?=?np.vectorize(lambda?x:?x?if?x?>=0?else?0)
#?實現softmax函數
def?softmax_func(arr):
????exp_arr?=?np.exp(arr)
????arr_sum?=?np.sum(exp_arr)
????softmax_arr?=?exp_arr/arr_sum
????return?softmax_arr
#?輸入向量
unkown?=?np.array([[6.1,?3.1,?5.1,?1.1]],?dtype=np.float32)
#?第一層的輸出
print("模型計算中...")
output_1?=?layer_output(unkown,?dense_1_kernel,?dense_1_bias)
output_1?=?relu(output_1)
#?第二層的輸出
output_2?=?layer_output(output_1,?dense_2_kernel,?dense_2_bias)
output_2?=?relu(output_2)
#?第三層的輸出
output_3?=?layer_output(output_2,?dense_3_kernel,?dense_3_bias)
output_3?=?softmax_func(output_3)

#?最終的輸出的softmax值
np.set_printoptions(precision=4)
print("最終的預測值向量為:?%s"%output_3)
其輸出的結果如下:
讀取模型中...
模型計算中...
最終的預測值向量為:?[[0.0242?0.6763?0.2995]]
額,這個輸出的預測值向量會是我們的DNN模型的預測值向量嗎?這時候,我們就需要回過頭來看看Keras入門(一)搭建深度神經網絡(DNN)解決多分類問題中的代碼了,注意,為了保證數值的可比較性,筆者已經將DNN模型的訓練次數改為10次了。讓我們來看看原來代碼的輸出結果吧:
Using?model?to?predict?species?for?features:?
[[6.1?3.1?5.1?1.1]]
Predicted?softmax?vector?is:?
[[0.0242?0.6763?0.2995]]
Predicted?species?is:?
Iris-versicolor
Yes,兩者的預測值向量完全一致!因此,我們用自己的方法也實現了這個DNN模型的預測功能,棒!
模型加載
當然,在實際的使用中,我們不需要再用自己的方法來實現模型的預測功能,只需使用Keras給我們提供好的模型導入功能(keras.models.())即可。使用以下Python代碼即可加載模型
????#?模型的加載及使用
????from?keras.models?import?load_model
????print("Using?loaded?model?to?predict...")
????load_model?=?load_model("E://logs/iris_model.h5")
????np.set_printoptions(precision=4)
????unknown?=?np.array([[6.1,?3.1,?5.1,?1.1]],?dtype=np.float32)
????predicted?=?load_model.predict(unknown)
????print("Using?model?to?predict?species?for?features:?")
????print(unknown)
????print("\nPredicted?softmax?vector?is:?")
????print(predicted)
????species_dict?=?{v:?k?for?k,?v?in?Class_dict.items()}
????print("\nPredicted?species?is:?")
????print(species_dict[np.argmax(predicted)])
輸出結果如下:
Using?loaded?model?to?predict...
Using?model?to?predict?species?for?features:?
[[6.1?3.1?5.1?1.1]]
Predicted?softmax?vector?is:?
[[0.0242?0.6763?0.2995]]
Predicted?species?is:?
Iris-versicolor
總結
本文主要介紹如何利用Keras來實現模型的保存、讀取以及加載。
本文將不再給出完整的Python代碼,如需完整的代碼,請參考Github地址:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。
国内精品第一页| 奇米色777欧美一区二区| 一区二区三区在线免费观看| 国产精品自拍毛片| 日本一区二区不卡视频| 粉嫩av一区二区三区在线播放 | 亚洲日本免费电影| 欧洲在线/亚洲| 日本在线播放一区二区三区| 欧美mv日韩mv国产| 91免费观看国产| 日韩不卡在线观看日韩不卡视频| 欧美夫妻性生活| 日韩高清在线电影| 欧美高清在线精品一区| 色婷婷狠狠综合| 亚洲国产精品久久不卡毛片 | 亚洲亚洲人成综合网络| 日韩亚洲欧美高清| 成人综合在线观看| 日韩激情一二三区| 国产精品私人影院| 欧美一级欧美三级在线观看| 成人精品小蝌蚪| 爽好久久久欧美精品| 国产欧美在线观看一区| 欧美日韩精品三区| 亚洲国产欧美一区二区三区丁香婷| 视频一区二区三区入口| 欧洲精品在线观看| 九九九久久久精品| 亚洲国产精品一区二区www | 波多野结衣在线aⅴ中文字幕不卡| 亚洲精品成人在线| 久久成人久久爱| 日韩一区二区在线看片| 国产人成亚洲第一网站在线播放 | 国产不卡在线播放| 成人精品视频.| 中文字幕一区二区三区不卡 | 777久久久精品| 久久国产乱子精品免费女| 一区二区视频在线| 久久久久国产免费免费| 91精品国产高清一区二区三区| 亚洲国产日韩a在线播放| av在线一区二区三区| 精品亚洲成av人在线观看| 性久久久久久久久久久久| 中文字幕在线不卡一区 | 国产精品国产三级国产aⅴ入口 | 国产精品久久影院| 国产日韩欧美制服另类| 精品久久久久久久久久久久包黑料 | 成人动漫av在线| 国产成人av福利| 极品瑜伽女神91| 国产一区在线视频| 久久国产日韩欧美精品| 青青草原综合久久大伊人精品| 亚洲一区二区三区在线播放| 一区二区三区四区精品在线视频| 亚洲欧美中日韩| 国产精品第四页| 亚洲视频一二区| 一级日本不卡的影视| 亚洲精品免费播放| 亚洲一线二线三线久久久| 亚洲小说春色综合另类电影| 亚洲福利一区二区三区| 日韩精品欧美精品| 国产一区二区三区电影在线观看| 国内精品伊人久久久久av影院 | 麻豆久久久久久| 黄色日韩网站视频| 国产成人精品亚洲777人妖| www.欧美色图| 国产精品白丝jk白祙喷水网站| 成人三级伦理片| 欧美性视频一区二区三区| 欧美日韩大陆一区二区| 久久先锋资源网| 欧美在线一区二区| 日韩一区二区精品在线观看| 精品国产sm最大网站| 欧美国产日本视频| 婷婷夜色潮精品综合在线| 捆绑变态av一区二区三区| 国产精品一区二区你懂的| av亚洲产国偷v产偷v自拍| 日韩中文字幕区一区有砖一区| 国内精品嫩模私拍在线| 成人av在线网站| 91精品婷婷国产综合久久| 国产女同互慰高潮91漫画| 亚洲综合在线免费观看| 国模一区二区三区白浆| 在线国产亚洲欧美| 久久久久久久综合日本| 亚洲成人一区在线| 99久久免费国产| 欧美成人伊人久久综合网| 亚洲欧洲制服丝袜| 国产一区二区0| 狠狠狠色丁香婷婷综合久久五月| 色综合亚洲欧洲| 国产日韩欧美精品一区| 亚洲国产日韩一级| 99久久精品免费看国产| 91精品国产一区二区三区香蕉| 国产精品国产三级国产普通话蜜臀 | 亚洲卡通动漫在线| 丁香五精品蜜臀久久久久99网站| 欧美亚洲动漫精品| 亚洲国产精品成人久久综合一区| 婷婷综合另类小说色区| 一本大道av一区二区在线播放| 久久精品人人做| 免费在线观看日韩欧美| 欧美日韩国产精选| 亚洲综合一区二区三区| 99久久精品99国产精品| 国产人成一区二区三区影院| 国内久久婷婷综合| 2024国产精品| 国产精品伊人色| 久久这里只有精品首页| 久久99精品国产.久久久久| 欧美一区二区三级| 视频在线在亚洲| 91精品欧美综合在线观看最新 | 在线视频一区二区免费| ...中文天堂在线一区| 成a人片国产精品| 国产精品网站导航| 成人伦理片在线| 欧美国产成人精品| 波多野结衣视频一区| 亚洲免费看黄网站| www.在线欧美| 亚洲成人av在线电影| 欧美一区二区网站| 国产伦精一区二区三区| 国产精品白丝在线| 欧美男女性生活在线直播观看| 美女网站色91| 国产精品久久久久久久久动漫| 欧洲人成人精品| 狠狠色狠狠色综合日日91app| 欧美国产日产图区| 欧美四级电影网| 国产精品综合av一区二区国产馆| 日韩美女视频一区| 欧美精品日韩一区| 国产一区二区三区久久久 | 亚洲国产中文字幕在线视频综合| 欧美久久久久免费| 国产自产v一区二区三区c| 国产精品卡一卡二卡三| 欧美精品色综合| 粉嫩欧美一区二区三区高清影视| 夜夜亚洲天天久久| 久久日韩精品一区二区五区| 99久久综合国产精品| 轻轻草成人在线| 国产精品成人免费| 欧美日本在线看| 国内精品不卡在线| 日韩一区二区视频在线观看| 国产综合一区二区| 国产精品午夜在线观看| 欧美一区二区三区男人的天堂| 奇米精品一区二区三区在线观看| 日韩欧美成人激情| 色国产综合视频| 视频一区视频二区中文字幕| 精品国产网站在线观看| 一本大道综合伊人精品热热| 久久日韩精品一区二区五区| 99免费精品在线| 亚洲国产精品精华液网站| 欧美一区二区视频观看视频 | 国产日韩欧美激情| 成人精品国产一区二区4080| 免费三级欧美电影| 国产欧美一区二区三区鸳鸯浴| 91在线丨porny丨国产| 粉嫩欧美一区二区三区高清影视| 一区二区三区精品视频| 日韩精品影音先锋| 99免费精品视频| 91丝袜美腿高跟国产极品老师 | 怡红院av一区二区三区| 国产欧美中文在线| 欧美日韩精品一区二区天天拍小说| 国产一区 二区| 亚洲天堂福利av| 中文字幕一区视频| 精品美女一区二区| 欧美久久久久久久久|