本文將會介紹如何利用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小時內與您取得聯系。
欧美日韩精品一区二区| 欧美私人免费视频| 欧美性淫爽ww久久久久无| 亚洲欧洲av色图| 91亚洲精品乱码久久久久久蜜桃| 国产精品久久久久久久午夜片| 99精品一区二区三区| 亚洲国产精品麻豆| 日韩视频在线一区二区| 国产原创一区二区三区| 亚洲欧美自拍偷拍| 欧美色视频一区| 韩国女主播成人在线观看| 中文字幕一区二区三| 欧美丰满高潮xxxx喷水动漫 | 精品入口麻豆88视频| 韩国一区二区三区| 亚洲精品国产精品乱码不99 | 色噜噜狠狠成人网p站| 亚洲在线观看免费视频| 久久嫩草精品久久久精品| 色视频一区二区| 久久99在线观看| 亚洲一区二区三区四区五区黄| 久久久久久久网| 欧美日韩免费观看一区二区三区| 国产精品一区二区无线| 天堂va蜜桃一区二区三区漫画版| **欧美大码日韩| 欧美变态凌虐bdsm| 欧美丝袜丝nylons| 91蝌蚪porny九色| 东方欧美亚洲色图在线| 蜜桃视频免费观看一区| 亚洲欧美怡红院| 久久免费电影网| 欧美午夜精品久久久久久孕妇| 成人自拍视频在线观看| 男人的天堂亚洲一区| 一区二区三区中文免费| 日本一区二区三区国色天香| 日韩欧美高清一区| 欧美日韩国产精选| 成人毛片在线观看| 国产综合成人久久大片91| 日本 国产 欧美色综合| 亚洲国产毛片aaaaa无费看| 亚洲欧美区自拍先锋| 中文字幕中文字幕一区二区| 久久久久久久久岛国免费| 欧美精品一区二区高清在线观看| 欧美精品久久久久久久久老牛影院| 色屁屁一区二区| 色噜噜狠狠成人网p站| 一本大道av一区二区在线播放 | 国产精品不卡一区二区三区| 国产精品视频免费| 2021国产精品久久精品| 3d动漫精品啪啪| 欧美久久一二区| 日韩精品一区二区三区四区| 精品国产免费视频| 久久九九影视网| 国产精品成人免费 | 一区二区三区在线视频观看| 中文字幕一区二区三区四区不卡| 一区二区三区中文字幕精品精品| 亚洲午夜电影在线| 日韩**一区毛片| 国产麻豆精品久久一二三| 成人av免费网站| 欧美视频一区二区在线观看| 欧美片网站yy| 中文无字幕一区二区三区| 亚洲欧美日韩一区二区三区在线观看 | 欧美怡红院视频| 91精品国产综合久久精品图片 | 91精品国产综合久久久久久久| 精品国产乱码91久久久久久网站| 久久久久国产一区二区三区四区 | 国产精品久久一卡二卡| 亚洲人成电影网站色mp4| 午夜精品123| 国产传媒一区在线| 欧美日韩在线三级| 久久久久久一级片| 亚洲成人一区二区在线观看| 国内不卡的二区三区中文字幕| 91蜜桃网址入口| 日韩亚洲欧美在线观看| 1区2区3区国产精品| 日韩激情视频网站| 99riav一区二区三区| 日韩一区二区三区电影在线观看 | 亚洲三级电影全部在线观看高清| 日韩高清不卡一区| 色婷婷综合久久久久中文一区二区 | 午夜精品视频在线观看| 成人黄色国产精品网站大全在线免费观看 | 亚洲欧美在线观看| 国产一区二区三区国产| 欧美精品在线观看播放| 1024国产精品| 国产精品18久久久久久久久| 日韩一二三区不卡| 视频一区中文字幕国产| 色悠悠久久综合| 中文一区二区完整视频在线观看| 日本va欧美va精品| 欧美日韩精品福利| 亚洲老妇xxxxxx| 91丨国产丨九色丨pron| 中文字幕国产精品一区二区| 国产不卡免费视频| 欧美一区二区三区色| 亚洲午夜免费福利视频| 色吧成人激情小说| 中文字幕中文字幕在线一区| 北条麻妃一区二区三区| 精品99一区二区三区| 麻豆专区一区二区三区四区五区| 欧美二区三区91| 日韩和的一区二区| 欧美一区日本一区韩国一区| 日韩国产高清影视| 69久久夜色精品国产69蝌蚪网| 一个色综合av| 欧美喷水一区二区| 美腿丝袜亚洲色图| 欧美成人女星排名| 经典三级视频一区| 国产欧美日韩视频在线观看| 国模冰冰炮一区二区| 久久人人爽人人爽| 丁香六月综合激情| 亚洲三级在线免费观看| 一本久久a久久精品亚洲| 亚洲一线二线三线视频| 欧美日韩成人一区二区| 麻豆一区二区在线| 2023国产精品视频| 99re8在线精品视频免费播放| 国产精品久久久久久久久图文区| caoporen国产精品视频| 亚洲gay无套男同| 日韩欧美亚洲国产精品字幕久久久| 久久99国产精品麻豆| 国产精品天干天干在线综合| 97精品超碰一区二区三区| 亚洲mv在线观看| 国产欧美精品一区aⅴ影院 | 国产一区二区免费视频| 亚洲欧美在线视频| 7777精品伊人久久久大香线蕉的| 久久不见久久见中文字幕免费| 国产精品国产自产拍高清av| 欧美肥妇bbw| 成人av网址在线观看| 日韩成人免费电影| 国产精品无人区| 欧美日韩中文字幕一区| 国产伦精一区二区三区| 亚洲一区二区黄色| 久久久精品欧美丰满| 在线一区二区三区做爰视频网站| 日韩成人午夜电影| 一区二区三区精品视频在线| ww亚洲ww在线观看国产| 欧美午夜精品一区二区三区| 成人免费看的视频| 黄页视频在线91| 午夜电影网亚洲视频| 中文字幕在线不卡视频| 欧美精品一区二区久久婷婷| 欧美日韩一区二区三区在线看| 丁香六月久久综合狠狠色| 黄色成人免费在线| 日本aⅴ亚洲精品中文乱码| 亚洲一区二区四区蜜桃| 中文字幕一区二区三区av| 久久―日本道色综合久久| 日韩视频免费观看高清完整版| 欧美在线影院一区二区| 91视频在线观看| 91一区二区在线| 91亚洲精品一区二区乱码| gogo大胆日本视频一区| 99久久免费国产| 99精品欧美一区二区三区小说 | 精品福利在线导航| 日韩一级片在线观看| 欧美日韩精品欧美日韩精品 | 精久久久久久久久久久| 天堂一区二区在线| 午夜精品爽啪视频| 午夜视频一区二区三区| 亚洲成人高清在线| 日本sm残虐另类| 激情久久五月天| 国产电影一区二区三区|