成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么加載之前保存的Keras模型得出不一樣的結(jié)果:經(jīng)驗(yàn)和教訓(xùn)

譯文
人工智能 機(jī)器學(xué)習(xí)
現(xiàn)在,機(jī)器學(xué)習(xí)模型在生產(chǎn)環(huán)境中的使用比以往都要廣泛。Keras就是這樣一種流行的庫,用于創(chuàng)建強(qiáng)大的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型。

現(xiàn)在,機(jī)器學(xué)習(xí)模型在生產(chǎn)環(huán)境中的使用比以往都要廣泛。Keras就是這樣一種流行的庫,用于創(chuàng)建強(qiáng)大的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型。然而,這些模型的訓(xùn)練過程常常計(jì)算開銷大,還費(fèi)時,具體取決于實(shí)際處理的數(shù)據(jù)和模型架構(gòu)。一些模型需要數(shù)周到數(shù)月的時間來訓(xùn)練。因此,能夠在本地存儲模型、需要進(jìn)行預(yù)測時再次檢索它們變得至關(guān)重要。但如果由于某種原因保存的模型沒有正確加載,該怎么辦?我會根據(jù)本人的經(jīng)驗(yàn)試著給出答案。

我不會詳細(xì)介紹如何使用和保存Keras模型,只是假設(shè)讀者熟悉該過程,直接介紹如何處理加載時意外的模型行為。也就是說,在訓(xùn)練存儲在Model變量中的Keras模型之后,我們希望將其保存為原樣,那樣下次加載時我們可以跳過訓(xùn)練,就進(jìn)行預(yù)測。

我首選的方法是保存模型的權(quán)重,權(quán)重在模型創(chuàng)建開始時是隨機(jī)的,隨著模型的訓(xùn)練而加以更新。于是我點(diǎn)擊了model.save_weights(“model.h5”)。創(chuàng)建了“model.h5”文件,含有模型學(xué)習(xí)到的權(quán)重。接下來,在另一個會話中,我使用與以前相同的架構(gòu)重建模型,并使用 new_model.load_weights(“model.h5”)加載我保存的訓(xùn)練權(quán)重。一切似乎都很好。只是我點(diǎn)擊 new_model.predict(test_data)后,得到的準(zhǔn)確性為零,不知道為什么。

事實(shí)證明,模型無法做出正確的預(yù)測有諸多原因。我在本文試著總結(jié)最常見的原因,并介紹如何解決。

1. 先仔細(xì)檢查數(shù)據(jù)。

我知道這似乎很明顯,但是從磁盤重新加載模型時,一有疏忽就會導(dǎo)致性能下降。比如說,如果您在構(gòu)建語言模型,應(yīng)確保在每個新會話中,您執(zhí)行以下操作:

  • 重新檢查類標(biāo)簽的順序。如果您將它們映射到數(shù)字,重新檢查在每個會話中每個類標(biāo)簽都有相同的數(shù)字。如果您使用list(set())函數(shù)來檢索,可能會發(fā)生這種情況,該函數(shù)每次都會以不同的順序返回您的標(biāo)簽。這最終可能會搞亂您的標(biāo)簽預(yù)測。
  • 檢查數(shù)據(jù)集。如果您的測試數(shù)據(jù)還沒有在另一個文件中,檢查訓(xùn)練-測試拆分不是隨機(jī)的,以便每次進(jìn)行預(yù)測時,您根據(jù)不同的數(shù)據(jù)進(jìn)行預(yù)測,因此您的預(yù)測準(zhǔn)確性最終會不一致。

當(dāng)然,您可能會遇到其他與數(shù)據(jù)相關(guān)的問題,具體取決于您從事的領(lǐng)域。然而,請始終檢查數(shù)據(jù)表示的一致性。

2. 度量指標(biāo)問題

導(dǎo)致錯誤或結(jié)果不一致的另一個原因是,準(zhǔn)確性度量指標(biāo)的選擇。在構(gòu)建模型并保存其權(quán)重時,我們通常執(zhí)行以下操作:

def build_model(max_len, n_tags): 
input_layer = Input(shape=(max_len, ))
output_layer = Dense(n_tags, activation = 'softmax')(input_layer)
model = Model(input_layer, output_layer)

return model

model = build_model()
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy", metrics=["accuracy"])

model.fit(..)
model.save_weights("model.h5")

如果我們需要在新的會話/腳本中打開它,需要執(zhí)行以下操作:

def build_model(max_len, n_tags): 
input_layer = Input(shape=(max_len, ))
output_layer = Dense(n_tags, activation = 'softmax')(input_layer)
model = Model(input_layer, output_layer)

return model
model = build_model()
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.load_weights("model.h5")
model.evaluate()

這可能拋出錯誤,具體視所使用的特定的Keras/Tensorflow版本而定。編譯模型并選擇“準(zhǔn)確性”作為指標(biāo)時,會出現(xiàn)問題。Keras識別準(zhǔn)確性的各種定義:“稀疏分類準(zhǔn)確性”、“分類準(zhǔn)確性”等;視您使用的數(shù)據(jù)而定,不同的定義是優(yōu)選的解決方案。這是由于如果我們將度量指標(biāo)設(shè)為“準(zhǔn)確性”,Keras將試著分配其中一種特定的準(zhǔn)確性類型,具體取決于它認(rèn)為哪一種最適合數(shù)據(jù)分布。它可能會在不同的運(yùn)行中推斷出不同的準(zhǔn)確性指標(biāo)。這里最好的解決方法是,始終明確設(shè)置準(zhǔn)確性指標(biāo),而不是讓Keras自行選擇。比如說,把

model.compile(optimizer="adam", 
loss="sparse_categorical_crossentropy", metrics=["accuracy"])

換成:

model.compile(optimizer="adam", 
loss="sparse_categorical_crossentropy", metrics=["sparse_categorical_accuracy"])

3. 隨機(jī)性

在與以前相同的數(shù)據(jù)上重新訓(xùn)練Keras神經(jīng)網(wǎng)絡(luò)時,您很少兩次獲得同樣的結(jié)果。這是由于Keras中的神經(jīng)網(wǎng)絡(luò)在初始化權(quán)重時使用隨機(jī)性,因此每次運(yùn)行時權(quán)重的初始化方式都不同,因此在學(xué)習(xí)過程中這些權(quán)重會以不同方式更新,于是在進(jìn)行預(yù)測時不太可能獲得相同的準(zhǔn)確性結(jié)果。

如果出于某種原因,您需要在訓(xùn)練之前使權(quán)重相等,可以在代碼前面設(shè)置隨機(jī)數(shù)生成器:

from numpy.random import seed
seed(42)
from tensorflow import set_random_seed
set_random_seed(42)

numpy隨機(jī)種子用于Keras,而至于Tensorflow后端,我們需要將其自己的隨機(jī)數(shù)生成器設(shè)置為相等的種子。該代碼片段將確保每次運(yùn)行代碼時,您的神經(jīng)網(wǎng)絡(luò)權(quán)重都會被同等地初始化。

4. 留意自定義層的使用

Keras提供了眾多層(Dense、LSTM、Dropout和BatchNormalizaton等),但有時我們希望對模型中的數(shù)據(jù)采取某種特定的操作,但又沒有為它定義的特定層。一般來說,Keras提供了兩種類型的層:Lambda和基礎(chǔ)層類。但對這兩種層要很小心,如果您將模型架構(gòu)保存為json格式更要小心。Lambda層的棘手地方在于序列化限制。由于它與Python字節(jié)碼的序列化一同保存,它只能加載到保存它的同一個環(huán)境中,即它不可移植。遇到該問題時,通常建議覆蓋keras.layers.Layer層,或者只保存其權(quán)重,從頭開始重建模型,而不是保存整個模型。

5. 自定義對象

很多時候,您會想要使用自定義函數(shù)應(yīng)用于數(shù)據(jù),或計(jì)算損失/準(zhǔn)確性等指標(biāo)的函數(shù)。

Keras允許這種使用,為此讓我們可以在保存/加載模型時指定額外的參數(shù)。假設(shè)我們想要將我們自行創(chuàng)建的特殊的損失函數(shù)與之前保存的模型一并加載:

model = load_model("model.h5", custom_objects=
{"custom_loss":custom_loss})

如果我們在新環(huán)境中加載該模型,必須在新環(huán)境中小心定義custom_loss函數(shù),因?yàn)槟J(rèn)情況下,保存模型時不會記住這些函數(shù)。即使我們保存了模型的整個架構(gòu),它也會保存該自定義函數(shù)的名稱,但函數(shù)體是我們需要額外提供的東西。

6. 全局變量初始化器

如果您使用Tensorflow 1.x作為后端——您可能仍然需要該后端用于許多應(yīng)用程序,這點(diǎn)尤為重要。運(yùn)行tf 1.x會話時,您需要運(yùn)行tf.global_variables_initializer(),它隨機(jī)初始化所有變量。這么做的副作用是,當(dāng)您嘗試保存模型時,它可能重新初始化所有權(quán)重。您可以手動停止該行為,只需運(yùn)行:

from keras.backend import manual_variable_initialization manual_variable_initialization(True)

結(jié)語

本文列出了最常導(dǎo)致您的Keras模型無法在新環(huán)境中正確加載的幾個因素。有時這些問題導(dǎo)致不可預(yù)測的結(jié)果,而在其他情況下,它們只會拋出錯誤。它們何時發(fā)生、如何發(fā)生,在很大程度上也取決于您使用的Python版本以及Tensorflow和Keras版本,因?yàn)槠渲幸恍┌姹静幌嗉嫒荩瑥亩鴮?dǎo)致意外的行為。但愿讀完本文后,下次遇到此類問題時您知道從何處入手。

原文標(biāo)題:Why Loading a Previously Saved Keras Model Gives Different Results: Lessons Learned,作者:Kristina Popova

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2021-07-12 23:53:22

Python交換變量

2012-03-07 17:24:10

戴爾咨詢

2012-12-20 10:17:32

IT運(yùn)維

2021-01-11 14:02:22

dudf運(yùn)維

2015-10-19 12:33:01

華三/新IT

2017-05-25 15:02:46

聯(lián)宇益通SD-WAN

2016-05-09 18:40:26

VIP客戶緝拿

2011-09-02 10:12:36

網(wǎng)速測試結(jié)果網(wǎng)速測試網(wǎng)速測試方法

2020-02-14 14:36:23

DevOps落地認(rèn)知

2021-12-23 15:11:46

Web 3.0元宇宙Metaverse

2011-03-14 16:51:24

2009-02-04 15:43:45

敏捷開發(fā)PHPFleaPHP

2009-12-01 16:42:27

Gentoo Linu

2018-05-09 15:42:24

新零售

2011-02-28 10:38:13

Windows 8

2012-07-18 02:05:02

函數(shù)語言編程語言

2009-06-12 15:26:02

2016-03-24 18:51:40

2023-03-20 08:19:23

GPT-4OpenAI

2015-08-25 09:52:36

云計(jì)算云計(jì)算產(chǎn)業(yè)云計(jì)算政策
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品免费在线 | 91久久久www播放日本观看 | 亚洲成人精品久久 | 精品视频在线观看 | 国产精品美女在线观看 | 国产一二三区在线 | 天天夜夜人人 | 欧美日韩一区精品 | 中文字幕国产 | 国内成人免费视频 | 一区二区三区四区在线视频 | 欧美中文 | 成人在线视频免费观看 | 日本黄色影片在线观看 | 国产免费麻豆视频 | 国产欧美一区二区三区久久手机版 | 日韩在线资源 | 黄色在线免费观看视频 | 亚洲欧美日韩中文在线 | 99久久夜色精品国产亚洲96 | 天天综合永久入口 | 在线免费观看黄色av | 国产精品www| 天天影视亚洲综合网 | 国产成人精品久久二区二区91 | 亚洲欧美在线一区 | 亚洲免费观看 | 盗摄精品av一区二区三区 | av香港经典三级级 在线 | 精品在线一区 | 欧美精品久久久久久久久久 | 农村真人裸体丰满少妇毛片 | 日韩中文字幕一区二区三区 | 欧美日一区二区 | 自拍偷拍亚洲视频 | 久久精品成人热国产成 | 中文字幕一区二区三区不卡 | 国内精品久久精品 | 亚洲精品日韩一区二区电影 | 色888www视频在线观看 | 91精品国产91久久久久游泳池 |