Pytorch 模型的超参数优化

Posted

技术标签:

【中文标题】Pytorch 模型的超参数优化【英文标题】:Hyperparameter optimization for Pytorch model [closed] 【发布时间】:2017-10-30 19:25:15 【问题描述】:

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

【问题讨论】:

【参考方案1】:

许多研究人员使用RayTune。它是一个可扩展的超参数调优框架,专门用于深度学习。您可以轻松地将它与任何深度学习框架(以下 2 行代码)一起使用,它提供了最先进的算法,包括 HyperBand、基于人口的训练、贝叶斯优化和 BOHB。

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.report(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()

[免责声明:我为这个项目做出了积极的贡献!]

【讨论】:

我尝试了这个例子,但我在此处发布时遇到错误:***.com/questions/62371787/… 可以请帮助我吗?【参考方案2】:

我发现如下:

HyperOpt Optuna tune

更多年轻项目

hypersearch 仅限于 FC 层。 skorch 只提供网格搜索 Auto-PyTorch

更新 新东西:

Ax: Adaptive Experimentation Platform by facebook

BoTorch: Bayesian Optimization in PyTorch

另外,我在post by @Richard Liaw找到了一张有用的表格:

【讨论】:

看起来您链接到 HyperOpt 的错误存储库。 This 是正确的 URL。 还有SHERPA,也有很好的对比表。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于Pytorch 模型的超参数优化的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GridSearchCV 的 keras 模型的超参数优化中使用简单的验证集?

深层神经网络的超参数调试、正则化及优化

TensorFlow 对象检测 API 中的超参数优化

Tensorflow 模型的超参数调优

PyTorch - 优化模型参数

pytorch优化器传入两个模型的参数/保存和加载两个模型的参数