Technic

机器学习利用第三方库自动寻找最优参数

2017-10-26

        目前的实验中我在用深度学习构建神经网络,开始的时候我一般是随机手调几个数大致看下效果,有时候如果需要知道网络效果随参数变化的趋势,就用for循环自动运行许多实验,然后我来收结果并用matlab批量分析。今天同事给我推荐了两个github上的库,利用这两个库可以实现对模型多次的运行并评价系统的运行结果。这个过程中不涉及对系统的优化,只是通过大量的自动运行的实验通过统计学的角度来比较什么样的参数相对较好。

        这两个库分别为Spearmint 和 BayesianOptimization.详细的介绍、安装方法和例子在各自的网站里都有写,我就不赘述了。目前我正在尝试使用Spearmint方法,所以先把安装过程中的一点小提示写在这里。

        首先,这个库是在python 2.7环境的,如果你使用python 3 的话会遇到一些问题,所以建议使用2.7.

        其次,新版的scipy中weave模块已经独立出来,所以原来的文件中使用的scipy.weave as weave语句就没法使用了,会报错。有人建议如下修改

 

try:
    import scipy.weave as weave
except ImportError:
    import weave

       

        可是我的电脑上即使更新scipy后也无法导入scipy.weave或者weave,所以只好使用下边这种方法,也就是完全不使用weave库。因为weave只使用了一次,所以只要在/spearmint/kernels/kernel_utils.py文件中把使用weave模块的部分注释掉即可,把第226行附近的代码调整为如下所示。原来使用weave模块用c语言计算的部分被用python语言的替代了,计算速度会下降,不过好歹可以用了。此外记得删除kernel_utils.py和/spearmint/models/gp_classifier.py文件中weave模块的import。

 

    #try:
    #    scipy.weave.inline(code, ['x1','x2','gX','ls','M','N','D'], \
    #                       type_converters=scipy.weave.converters.blitz, \
    #                       compiler='gcc')
    #except:
    # The C code weave above is 10x faster than this:
    for i in xrange(0,x1.shape[0]):
        gX[i,:,:] = 2*(x1[i,:] - x2[:,:])*(1/ls)
    return gX

 

        这样调整好之后,可以用example文件夹中的例子先进性一下试验和学习。然后根据介绍相应的构建适合自己项目的主程序以及json文件。

        关于介绍中说的第三步step 3: Running spearmint中的代码

python main.py \</path/to/experiment/directory\>

这里的main.py指的是spearmint的主程序,在spearmint文件夹下,所以运行这个语句之前需要先转到spearmint文件夹,否则会提示找不到相应的文件。

 

参考:

  1. https://github.com/HIPS/Spearmint/issues/99
  2. https://github.com/HIPS/Spearmint/pull/107/commits/2f29459ade04e399e55fa9f4334265de60a9b4cd

Only registered users can comment.

  1. 我也正打算使用spearmint。您的文章是非常好的使用备忘录,感谢分享!

    1. 非常感谢支持,我也是边学边记下来,也是希望能方便别人和自己以后查阅。一起加油!

Leave a Reply

Your email address will not be published. Required fields are marked *