现在的位置: 首页 > 综合 > 正文

Deeplearning学习之Theano(1)–保存参数

2018年04月13日 ⁄ 综合 ⁄ 共 1386字 ⁄ 字号 评论关闭

    最近在用Theano做关于Deeplearning的东西,由于是新手,以前没有使用过Theano,只是用过一点Matlab的Deeplearning Toolbox,因此,对于一个新的工具只能从tutorial入手,由于时间比较急,所以没有看Theano的tutorial,而是从Deeplearning的tutorial 入手。









一.保存参数的原因

    在做和机器学习相关的东西的时候,一个不能忘的事情就是,要记得把训练好的模型保存下来,主要是因为训练一次的时间太长了,如果没有把模型保存下来的话,后面进行验证和测试就会很困难,而且,保存模型对于以后记录调整参数对于算法的影响也会有很大作用。



二.保存参数

    从Theano的帮助文档可以看出,Theano推荐的对于模型参数为Theano的shared variables(也就是类似于C++的static变量)的情况,保存模型的参数的方法是将参数的值用cPickle的方法进行保存。
   下面以模型的参数为w,v,u为例,实现对于w,v,u的参数的保存。由于w,v,u都是Theano的shared variables,因此,可以通过get_value函数获得参数的实际值,然后使用cPickle进行保存,如下所示:
import cPickle 
save_file = open('path', 'wb')  # this will overwrite current contents                     
cPickle.dump(w.get_value(borrow=True), save_file, -1)  # the -1 is for HIGHEST_PROTOCOL  
cPickle.dump(v.get_value(borrow=True), save_file, -1)  # .. and it triggers much more efficient 
cPickle.dump(u.get_value(borrow=True), save_file, -1)  # .. storage than numpy's default   
save_file.close()

三.读取参数

     在保存了参数之后,就是要进行读取参数了,必须按照保存参数时的顺序读取出原来保存的参数。用于保存读取出来的参数的变量也要和原来的参数的类型和维数一致,并且要为Theano的shared variables。然后以w,v,u变量的set_value函数来保存读取的参数为例,读取参数的代码如下:
save_file = open('path')                                                          
w.set_value(cPickle.load(save_file), borrow=True)                                          
v.set_value(cPickle.load(save_file), borrow=True)                                          
u.set_value(cPickle.load(save_file), borrow=True)                                          
save_file.close()

四.可以改进的地方

     由于使用cPickle保存的文件是Python特有的格式,因此无法通过直接打开了参看保存的参数的具体值,而且无法将保存的参数用于其他语言写的程序中,因此,应该考虑使用xml格式或者json格式这种通用的文件格式来保存参数,不过这又涉及到Theano的shared variables的值如何保存到xml文件的要求,需要后续进一步研究。
    等有了进展再补充

抱歉!评论已关闭.