使用NNI的scikit-learn以及Tensorflow分析
一、NNI简介
NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。
Supported Frameworks | Tuning Algorithms | Training Services |
---|---|---|
PyTorch | TPE | Local Machine |
TensorFlow | Random Search | Remote Servers |
Keras | Anneal | OpenPAI |
MXNet | Naive Evolution | Kubeflow |
Caffe2 | SMAC | FrameworkController on K8S (AKS etc.) |
CNTK | Batch | |
KerasChainer | Grid Search | |
Theano | Hyperband | |
Network Morphism | ||
ENAS | ||
Metis Tuner |
使用场景
- 在本地 Trial 不同的自动机器学习算法来训练模型。
- 在分布式环境中加速自动机器学习(如:远程 GPU 工作站和云服务器)。
- 定制自动机器学习算法,或比较不同的自动机器学习算法。
- 在自己的机器学习平台中支持自动机器学习。
具体安装以及应用请参照官网。
二、使用NNI对scikit-learn进行调参
scikit-learn (sklearn) 是数据挖掘和分析的流行工具。 它支持多种机器学习模型,如线性回归,逻辑回归,决策树,支持向量机等。 提高 scikit-learn 的效率是非常有价值的课题。
NNI 支持多种调优算法,可以为 scikit-learn 搜索最佳的模型和超参,并支持本机、远程服务器组、云等各种环境。
- 样例概述
此样例使用了数字数据集,由 1797 张 8x8 的图片组成,每张图片都是一个手写数字。目标是将这些图片分到 10 个类别中。在此样例中,使用了 SVC 作为模型,并选择了一些参数,包括 “C”, “keral”, “degree”, “gamma” 和 “coef0”。 关于这些参数的更多信息,可参考这里 。
- 如何在 NNI 中使用 sklearn
只需要如下几步,即可在 sklearn 代码中使用 NNI。
- 第一步,定义搜索空间
准备 search_space.json 文件来存储选择的搜索空间。 例如,不同的正则化值:
{
"C": {
"_type":"uniform","_value":[0.1, 1]},
}
如果要选择不同的正则化参数、核函数等,可以将其放进一个search_space.json文件中。
{
"C": {
"_type":"uniform","_value":[0.1, 1]},
"keral": {
"_type":"choice","_value":["linear", "rbf", "poly", "sigmoid"]},
"degree": {
"_type":"choice","_value":[1, 2, 3, 4]},
"gamma": {