DeepLearning tutorial(2)机器学习算法在训练过程中保存参数
FROM:?http://blog.csdn.net/u012162613/article/details/43169019
DeepLearning tutorial(2)機(jī)器學(xué)習(xí)算法在訓(xùn)練過(guò)程中保存參數(shù)
@author:wepon
@blog:http://blog.csdn.net/u012162613/article/details/43169019
參考:pickle — Python object serialization、DeepLearning Getting started
一、python讀取"***.pkl.gz"文件
用到python里的gzip以及cPickle模塊,簡(jiǎn)單的使用代碼如下,如果想詳細(xì)了解可以參考上面給出的鏈接。
[python] view plaincopy
其實(shí)就是分兩步,先讀取gz文件,再讀取pkl文件。pkl文件的應(yīng)用正是下文要講的,我們用它來(lái)保存機(jī)器學(xué)習(xí)算法訓(xùn)練過(guò)程中的參數(shù)。
二、機(jī)器學(xué)習(xí)算法在訓(xùn)練過(guò)程中如何保存參數(shù)?
我們知道,機(jī)器學(xué)習(xí)算法的計(jì)算量特別大,跑起程序來(lái)少則幾十分鐘,多則幾小時(shí)甚至幾天,中間如果有什么狀況(比如電腦過(guò)熱重啟、程序出現(xiàn)一些小bug...)程序就會(huì)中斷,如果你沒(méi)把參數(shù)定時(shí)保存下來(lái),前面的訓(xùn)練就當(dāng)白費(fèi)了,所以很有必要在程序中加入定時(shí)保存參數(shù)的功能,這樣下次訓(xùn)練就可以將參數(shù)初始化為上次保存下來(lái)的結(jié)果,而不是從頭開(kāi)始隨機(jī)初始化。
那么如何保存模型參數(shù)?可以將參數(shù)深復(fù)制,或者調(diào)用python的數(shù)據(jù)永久存儲(chǔ)cPickle模塊,原理不多說(shuō),直接使用就行。(注:python里有cPickle和pickle,cPickle基于c實(shí)現(xiàn),比pickle快。)
直接用一個(gè)例子來(lái)說(shuō)明如何使用:
[python] view plaincopy
在deeplearning算法中,因?yàn)橛玫紾PU,經(jīng)常是將參數(shù)聲明為shared變量,因此必須用上get_value()、set_value,例如有w、v、u三個(gè)shared變量,使用代碼如下:
[python] view plaincopy
一個(gè)實(shí)例
下面我以一個(gè)實(shí)際的例子來(lái)說(shuō)明如何在程序中加入保存參數(shù)的功能。以deeplearnig.net上的邏輯回歸為例,它的代碼地址:logistic_sgd.py。這個(gè)程序是將邏輯回歸用于MNIST分類(lèi),程序運(yùn)行過(guò)程并不會(huì)保存參數(shù),甚至運(yùn)行結(jié)束時(shí)也不保存參數(shù)。怎么做可以保存參數(shù)?
在logistic_sgd.py代碼里最后面的sgd_optimization_mnist()函數(shù)里,有個(gè)while循環(huán),里面有一句代碼:
[python] view plaincopy
這句代碼的意思就是判斷當(dāng)前的驗(yàn)證損失是否小于最佳的驗(yàn)證損失,是的話,下面會(huì)更新best_validation_loss,也就是說(shuō)當(dāng)前參數(shù)下,模型比之前的有了優(yōu)化,因此我們可以在這個(gè)if語(yǔ)句后面加入保存參數(shù)的代碼:
[python] view plaincopy
save_params函數(shù)定義如下:
[python] view plaincopy
當(dāng)然參數(shù)的個(gè)數(shù)根據(jù)需要去定義。在logistic_sgd.py中參數(shù)只有classifier.W,classifier.b,因此這里定義為save_params(param1,param2)。
在logistic_sgd.py里我加入了save_params(classifier.W,classifier.b),運(yùn)行了3次epoch,中斷掉程序,在代碼所在的文件夾下,多出了一個(gè)params文件,我們來(lái)看看這個(gè)文件里是什么東西:
[python] view plaincopy
也就是說(shuō),params文件確實(shí)保存了我們訓(xùn)練過(guò)程中的參數(shù)。
那么如何用保存下來(lái)的參數(shù)來(lái)初始化我們的模型的參數(shù)呢?
在logistic_sgd.py中的class LogisticRegression(object)下,self.W和self.b本來(lái)是初始化為0的,我們可以在下面加上幾行代碼,這樣就可以用我們保存下來(lái)的params文件來(lái)初始化參數(shù)了:
[python] view plaincopy
總結(jié)
以上是生活随笔為你收集整理的DeepLearning tutorial(2)机器学习算法在训练过程中保存参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DeepLearning tutoria
- 下一篇: DeepLearning tutoria