2018-06-26《TensorFlow模型保存也切、提取、預(yù)測》更新版

任務(wù)一:用保存好的模型做預(yù)測

由于經(jīng)常要使用tensorflow進(jìn)行網(wǎng)絡(luò)訓(xùn)練腰湾,但是在用的時候每次都要把模型重新跑一遍,這樣就比較麻煩疆股;另外由于某些原因程序意外中斷费坊,也會導(dǎo)致訓(xùn)練結(jié)果拿不到,而保存中間訓(xùn)練過程的模型可以以便下次訓(xùn)練時繼續(xù)使用旬痹。所以學(xué)會tensorflow的save model和load model非常有用附井。

英文學(xué)習(xí)手冊:A quick complete tutorial to save and restore Tensorflow models

手冊內(nèi)容

1.什么是Tensorflow模型?

當(dāng)你訓(xùn)練完一個神經(jīng)網(wǎng)絡(luò)后两残,你可能想保存它永毅,方便將來用上,直接用的產(chǎn)品上人弓,不用再經(jīng)過漫長的訓(xùn)練沼死。Tensorflow模型主要包含兩個內(nèi)容:1)我們設(shè)計的網(wǎng)絡(luò)圖 ?2)我們訓(xùn)練過程中得到的網(wǎng)絡(luò)圖中的變量(variable)參數(shù)值。 因此崔赌,Tensorflow主要由兩個文件來描述:

a)Meta graph:這個文件主要保存整個Tensorflow圖模型意蛀,包含所有的變量(variables)、操作(operations)健芭、集合(collections)等县钥。這個文件的擴(kuò)展為.meta

b)Checkpoint file:這個二進(jìn)制文件包含所有的權(quán)重值慈迈、偏量值若贮、梯度下降值以及其他變量值。這個文件的擴(kuò)展為.ckpt痒留。

2.如何保存Tensorflow模型

語句1:saver=tf.train.Saver()

在Tensorflow中谴麦,如果你想保存圖模型和所有的參數(shù)值,那么首先伸头,我們應(yīng)該使用tf.train.Saver()創(chuàng)建一個模型保存類的實例细移。

語句2:saver.save(sess,'my_model')

注意:Tensorflow變量值只存在于會話執(zhí)行中,因此保存模型的語句saver.save(sess,'my_model')應(yīng)該在with tf.Session() as see:語句之后熊锭。

模型保存簡單代碼:

模型保存簡單代碼
模型保存后弧轧,生成的文件

注意:如果tf.train.Saver()實例化雪侥,沒有傳入具體的參數(shù)時,它就會保存模型中所有的變量精绎。如果速缨,我們只想保存自己想要的一些變量,我們就可以把自己想要保存的變量名代乃,以list的形式放入tf.train.Save()中旬牲。如下:

只保存自己想要的變量

3.加載模型

模型的加載需要2步:

a)建立圖模型

語句1:saver=tf.train.import_meta_graph('my_model.meta')

我們已經(jīng)在保存的時候,將模型的圖保存在.meta文件中了搁吓。因此使用語句:saver=tf.train.import_meta_graph('my_model.meta')原茅。注意:此處雖然重新加載了圖模型,但還沒有將圖中參數(shù)的實際數(shù)據(jù)放入堕仔。

b)加載參數(shù)

語句2:saver.restore(sess,tf.train.latest_checkpoint('你的模型路徑名')

使用saver(它是tf.train.Saver()類實例化的對象)調(diào)用restore()方法擂橘,就能夠加載模型參數(shù)。

模型加載簡單代碼:

模型加載簡單代碼

4.使用存儲好的模型進(jìn)行工作

前面已經(jīng)學(xué)會了模型保存save和模型加載restore摩骨。此處要學(xué)習(xí)利用提前訓(xùn)練好的模型的參數(shù)通贞,去預(yù)測、調(diào)試恼五、或進(jìn)一步訓(xùn)練昌罩。

無論什么時候使用Tensorflow,自己定義的模型圖灾馒,都需要放入訓(xùn)練數(shù)據(jù)集和一些參數(shù)茎用。標(biāo)準(zhǔn)的方式是,將訓(xùn)練集和參數(shù)使用placeholder占位符進(jìn)行填充睬罗。注意:當(dāng)模型保存的時候绘搞,其實使用placeholder占位符填充的的數(shù)據(jù)是沒有保存的

注意:保存模型時傅物,placeholder占位符的數(shù)據(jù)是沒有保存的

A.原始模型夯辖,新數(shù)據(jù)

利用原始的網(wǎng)絡(luò)結(jié)構(gòu),不同的數(shù)據(jù)集董饰,我們只需將新的數(shù)據(jù)集通過feed_dict傳入原始模型中就行蒿褂。具體步驟如下:

1)創(chuàng)建會話tf.Session()?

2)加載模型 (加載圖和加載參數(shù))

3)使用graph=tf.get_default_graph()語句說明使用原始模型

4)獲取原始模型中的placeholder和自己想要的ops,然后通過feed_dict字典卒暂,對占位符填充新的數(shù)據(jù)集啄栓。

5)使用sess.run()運(yùn)行自己想要op和輸入新數(shù)據(jù)集

【舊模型,新數(shù)據(jù)集】的一個簡單代碼

B.原始模型變新模型也祠,新數(shù)據(jù)集

如果想要在原始訓(xùn)練好的模型的基礎(chǔ)上添加更多的操作昙楚,然后再訓(xùn)練這個新模型,同樣也是可以做到的诈嘿。具體步驟如下:

1)創(chuàng)建會話tf.Session()?

2)加載模型 (加載圖和加載參數(shù))

3)使用graph=tf.get_default_graph()語句說明使用原始模型

4)獲取原始模型中的placeholder堪旧,然后通過feed_dict字典削葱,對占位符填充新的數(shù)據(jù)集。

5)獲取原始模型中你想要的ops淳梦,然后添加新的ops析砸,就構(gòu)成了新模型。

6)使用sess.run()運(yùn)行自己想要op和輸入新數(shù)據(jù)集

【舊模型變新模型爆袍,新數(shù)據(jù)集】的一個簡單代碼


模型預(yù)測:


1
2
3

出現(xiàn)問題:KeyError: "The name 'encoder_inputs:0' refers to a Tensor which does not exist. The operation, 'encoder_inputs', does not exist in the graph." ? ? ?錯誤提示:我保存的模型中首繁,占位符encoder_inputs沒有存在我當(dāng)前保存的圖中。



出現(xiàn)該問題的原因:這個placeholder陨囊,被放在了自定義命名空間Input下了弦疮,所以在獲取這個變量名時,路徑就沒有寫對蜘醋。

出錯原因胁塞,該tensor在命名空間下,所以自己的獲取路徑不對

問題解決辦法:修改graph.get_tensor_by_name('tensor正確的路徑名')堂湖。

解決辦法

問題解決完畢!W赐痢N薹洹!



出現(xiàn)問題:KeyError: "The name 'decode:0' refers to a Tensor which does not exist. The operation, 'decode', does not exist in the graph." ?錯誤提示:我想獲取的decode其實不是一個簡單的op蒙谓,并不存在于保存的圖模型中斥季。

其實decode在程序中是一個自定義函數(shù)±弁裕可以使用tf.identity給op命名酣倾。具體改動:

tf.identity()將out.sample_id這個op命名為yaojuan

使用tf.identity()重新命名tensor名后,就能夠很好的使用graph.get_tensor_by_name()獲取op谤专。

解決方法

問題解決完畢T晡!置侍!




最終改動后的預(yù)測模型:

1
2
3

存在的問題:使用加載的模型映之,保證不了精確率!@弧杠输!不知道是不是權(quán)值沒有l(wèi)oad上,或者是在預(yù)測過程中秕衙,參數(shù)權(quán)值自己又隨意變動了蠢甲?



參考文章:

【1】【tensorflow】保存模型、再次加載模型等操作

【2】seq2seq.py? ??

【3】Tensorflow動態(tài)seq2seq使用總結(jié)

【4】tensorflow將訓(xùn)練好的模型freeze,即將權(quán)重固化到圖里面,并使用該模型進(jìn)行預(yù)測

任務(wù)二:周杰倫粉絲團(tuán)數(shù)據(jù)主題

1.下載安裝Robo 3T? ?用于連接mongodb

2.數(shù)據(jù)存放在ai_crawler中

數(shù)據(jù)位置

3.使用python讀取數(shù)據(jù)据忘,并分析:還沒開始鹦牛。


任務(wù)三:情感分析代碼

該代碼已經(jīng)拷到自己電腦上了搞糕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市能岩,隨后出現(xiàn)的幾起案子寞宫,更是在濱河造成了極大的恐慌,老刑警劉巖拉鹃,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辈赋,死亡現(xiàn)場離奇詭異,居然都是意外死亡膏燕,警方通過查閱死者的電腦和手機(jī)钥屈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坝辫,“玉大人篷就,你說我怎么就攤上這事〗Γ” “怎么了竭业?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長及舍。 經(jīng)常有香客問我未辆,道長,這世上最難降的妖魔是什么锯玛? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任咐柜,我火速辦了婚禮,結(jié)果婚禮上攘残,老公的妹妹穿的比我還像新娘拙友。我一直安慰自己,他們只是感情好歼郭,可當(dāng)我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布遗契。 她就那樣靜靜地躺著,像睡著了一般病曾。 火紅的嫁衣襯著肌膚如雪姊途。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天知态,我揣著相機(jī)與錄音捷兰,去河邊找鬼。 笑死负敏,一個胖子當(dāng)著我的面吹牛贡茅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼顶考,長吁一口氣:“原來是場噩夢啊……” “哼赁还!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驹沿,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艘策,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渊季,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朋蔫,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年却汉,在試婚紗的時候發(fā)現(xiàn)自己被綠了驯妄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡合砂,死狀恐怖青扔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翩伪,我是刑警寧澤微猖,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站缘屹,受9級特大地震影響凛剥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜囊颅,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一当悔、第九天 我趴在偏房一處隱蔽的房頂上張望傅瞻。 院中可真熱鬧踢代,春花似錦、人聲如沸嗅骄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溺森。三九已至慕爬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屏积,已是汗流浹背医窿。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留炊林,地道東北人姥卢。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親独榴。 傳聞我的和親對象是個殘疾皇子僧叉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內(nèi)容