Pytorch模型的超参数优化

Ale*_*lex 18 machine-learning deep-learning hyperparameters pytorch

为Pytorch模型执行超参数优化的最佳方法是什么?实施例如自己随机搜索?使用Skicit Learn?或者还有什么我不知道的?

Mic*_*l D 18

我发现的内容如下:

更多年轻项目

更新 一些新东西:

另外,我在@Richard Liaw 的帖子中找到了一个有用的表格:

在此处输入图片说明

  • 您似乎链接到了错误的 HyperOpt 存储库。[此](https://github.com/hyperopt/hyperopt) 是正确的 URL。 (2认同)
  • 还有 [SHERPA](https://github.com/sherpa-ai/sherpa),它也有一个很好的比较表。 (2认同)

ric*_*iaw 8

正如@jmancuso所提到的,我在HyperBand上取得了非常好的成绩.

您可以在Tune中找到此算法的实现.它是用于超参数调整的可扩展框架/工具,专门用于深度学习.

它还允许您__CODE__在大约10行Python中切换有效的搜索算法(即/ TPE和HyperBand).

import torch.optim as optim
from ray import tune
from ray.tune.examples.mnist_pytorch import get_data_loaders, ConvNet, train, test


def train_mnist(config):
    train_loader, test_loader = get_data_loaders()
    model = ConvNet()
    optimizer = optim.SGD(model.parameters(), lr=config["lr"])
    for i in range(10):
        train(model, optimizer, train_loader)
        acc = test(model, test_loader)
        tune.track.log(mean_accuracy=acc)


analysis = tune.run(
    train_mnist, config={"lr": tune.grid_search([0.001, 0.01, 0.1])})

print("Best config: ", analysis.get_best_config(metric="mean_accuracy"))

# Get a dataframe for analyzing trial results.
df = analysis.dataframe()
Run Code Online (Sandbox Code Playgroud)

(免责声明:我积极参与这个项目!)


Gav*_*ray 6

进行黑盒优化的最简单的无参数方法是随机搜索,它将比网格搜索更快地探索高维空间.有关于此的论文但是tl; dr随机搜索每次都会在每个维度上获得不同的值,而使用网格搜索则不会.

贝叶斯优化具有良好的理论保证(尽管有近似值),像Spearmint这样的实现可以包装你拥有的任何脚本; 有超参数,但用户在实践中看不到它们.通过显示比朴素贝叶斯优化更快的收敛,Hyperband得到了很多关注.它能够通过针对不同的迭代次数运行不同的网络来实现这一点,并且贝叶斯优化不能天真地支持它.尽管可以通过考虑到这一点的贝叶斯优化算法做得更好,例如FABOLAS,但在实践中,超频带非常简单,您可能更好地使用它并观察它以间隔调整搜索空间.


小智 5

您可以使用贝叶斯优化(完全公开,我已经为此包做出贡献)或Hyperband.这两种方法都试图自动化超参数调整阶段.据称,超频带是这个领域的先进技术.除了随机搜索之外,Hyperband是我听说过的唯一无参数方法.如果您愿意,您还可以考虑使用强化学习来学习最佳超参数.