为 Pytorch 模型执行超参数优化的最佳方法是什么?自己实施例如随机搜索?使用 Skicit 学习?或者还有什么我不知道的?
问问题
28321 次
4 回答
27
许多研究人员使用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()
[免责声明:我积极参与这个项目!]
于 2018-04-07T07:47:28.183 回答
20
我发现如下:
更多年轻项目:
- 超搜索 仅限于 FC 层。
- skorch Just 网格搜索可用
- 自动 PyTorch
更新 一些新的东西:
另外,我在@Richard Liaw的帖子中发现了一张有用的表格:
于 2019-11-07T10:40:02.297 回答
8
进行黑盒优化的最简单的无参数方法是随机搜索,它将比网格搜索更快地探索高维空间。有这方面的论文,但是 tl;dr 使用随机搜索每次都会在每个维度上获得不同的值,而使用网格搜索则不会。
贝叶斯优化具有良好的理论保证(尽管有近似值),并且像 Spearmint 这样的实现可以包装您拥有的任何脚本;有超参数,但用户在实践中看不到它们。Hyperband 通过显示比朴素贝叶斯优化更快的收敛性而受到了广泛关注。它能够通过为不同数量的迭代运行不同的网络来做到这一点,而贝叶斯优化并不天真地支持这一点。虽然使用可以考虑到这一点的贝叶斯优化算法(例如FABOLAS )可以做得更好,但实际上超频带非常简单,您可能最好使用它并观察它以每隔一段时间调整搜索空间。
于 2017-08-01T14:59:58.650 回答