任務(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
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ù)是沒有保存的。
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ù)集
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ù)集
模型預(yù)測:
出現(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下了弦疮,所以在獲取這個變量名時,路徑就沒有寫對蜘醋。
問題解決辦法:修改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()重新命名tensor名后,就能夠很好的使用graph.get_tensor_by_name()獲取op谤专。
問題解決完畢T晡!置侍!
最終改動后的預(yù)測模型:
存在的問題:使用加載的模型映之,保證不了精確率!@弧杠输!不知道是不是權(quán)值沒有l(wèi)oad上,或者是在預(yù)測過程中秕衙,參數(shù)權(quán)值自己又隨意變動了蠢甲?
參考文章:
【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中
3.使用python讀取數(shù)據(jù)据忘,并分析:還沒開始鹦牛。
任務(wù)三:情感分析代碼
該代碼已經(jīng)拷到自己電腦上了搞糕。