DeepLearning tutorial(2)机器学习算法在训练过程中保存参数
FROM: http://blog.csdn.net/u012162613/article/details/43169019
DeepLearning tutorial(2)机器学习算法在训练过程中保存参数
@author:wepon
@blog:http://blog.csdn.net/u012162613/article/details/43169019
参考:pickle — Python object serialization、DeepLearning Getting started
一、python读取"***.pkl.gz"文件
用到python里的gzip以及cPickle模块,简单的使用代码如下,如果想详细了解可以参考上面给出的链接。
[python] view plaincopy
其实就是分两步,先读取gz文件,再读取pkl文件。pkl文件的应用正是下文要讲的,我们用它来保存机器学习算法训练过程中的参数。
二、机器学习算法在训练过程中如何保存参数?
我们知道,机器学习算法的计算量特别大,跑起程序来少则几十分钟,多则几小时甚至几天,中间如果有什么状况(比如电脑过热重启、程序出现一些小bug...)程序就会中断,如果你没把参数定时保存下来,前面的训练就当白费了,所以很有必要在程序中加入定时保存参数的功能,这样下次训练就可以将参数初始化为上次保存下来的结果,而不是从头开始随机初始化。
那么如何保存模型参数?可以将参数深复制,或者调用python的数据永久存储cPickle模块,原理不多说,直接使用就行。(注:python里有cPickle和pickle,cPickle基于c实现,比pickle快。)
直接用一个例子来说明如何使用:
[python] view plaincopy
在deeplearning算法中,因为用到GPU,经常是将参数声明为shared变量,因此必须用上get_value()、set_value,例如有w、v、u三个shared变量,使用代码如下:
[python] view plaincopy
一个实例
下面我以一个实际的例子来说明如何在程序中加入保存参数的功能。以deeplearnig.net上的逻辑回归为例,它的代码地址:logistic_sgd.py。这个程序是将逻辑回归用于MNIST分类,程序运行过程并不会保存参数,甚至运行结束时也不保存参数。怎么做可以保存参数?
在logistic_sgd.py代码里最后面的sgd_optimization_mnist()函数里,有个while循环,里面有一句代码:
[python] view plaincopy
这句代码的意思就是判断当前的验证损失是否小于最佳的验证损失,是的话,下面会更新best_validation_loss,也就是说当前参数下,模型比之前的有了优化,因此我们可以在这个if语句后面加入保存参数的代码:
[python] view plaincopy
save_params函数定义如下:
[python] view plaincopy
当然参数的个数根据需要去定义。在logistic_sgd.py中参数只有classifier.W,classifier.b,因此这里定义为save_params(param1,param2)。
在logistic_sgd.py里我加入了save_params(classifier.W,classifier.b),运行了3次epoch,中断掉程序,在代码所在的文件夹下,多出了一个params文件,我们来看看这个文件里是什么东西:
[python] view plaincopy
也就是说,params文件确实保存了我们训练过程中的参数。
那么如何用保存下来的参数来初始化我们的模型的参数呢?
在logistic_sgd.py中的class LogisticRegression(object)下,self.W和self.b本来是初始化为0的,我们可以在下面加上几行代码,这样就可以用我们保存下来的params文件来初始化参数了:
[python] view plaincopy
总结
以上是生活随笔为你收集整理的DeepLearning tutorial(2)机器学习算法在训练过程中保存参数的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: DeepLearning tutoria
- 下一篇: DeepLearning tutoria