Nevergrad调参用

快速上手

import nevergrad as ng
def square(x):
    return sum((x - 0.5) ** 2)

# optimization on x as an array of shape (2,)
optimizer = ng.optimizers.NGOpt(parametrization=2, budget=100)
recommendation = optimizer.minimize(square)  # best value
print(recommendation.value)

混合参数:

入门:

浮点、整形、字符串

def fake_training(learning_rate: float, batch_size: int, architecture: str) -> float:
    # optimal for learning_rate=0.2, batch_size=4, architecture="conv"
    return (learning_rate - 0.2) ** 2 + (batch_size - 4) ** 2 + (0 if architecture == "conv" else 10)

#参数设定
parametrization = ng.p.Instrumentation(
    # a log-distributed scalar between 0.001 and 1.0
    learning_rate=ng.p.Log(lower=0.001, upper=1.0),
    # an integer from 1 to 12
    batch_size=ng.p.Scalar(lower=1, upper=12).set_integer_casting(),
    # either "conv" or "fc"
    architecture=ng.p.Choice(["conv", "fc"]),
)

optimizer = ng.optimizers.NGOpt(parametrization=parametrization, budget=100)
recommendation = optimizer.minimize(fake_training)

print(recommendation.kwargs)  # shows the recommended keyword arguments of the function
# >>> {'learning_rate': 0.1998, 'batch_size': 4, 'architecture': 'conv'}

优化器变更:

针对下述NGOpt

ng.optimizers.NGOpt(parametrization=instrum, budget=100, num_workers=1)

可以有更多选择:

NGOpt:是一个“元”优化器,可以适应所提供的设置(budget、num_workers、parametrization),因此应该是一个良好的默认值。

TwoPointsDE:在许多情况下都非常优秀,包括非常高的num_workers。

PortfolioDiscreteOnePlusOne :在混合设置的离散设置中非常优秀,当参数的高精度不相关时; 它可能是超参数选择的一个很好的选择。

OnePlusOne:是num_workers<8的连续参数的简单稳健方法。

CMA:当环境不是很嘈杂(人数约为50人)且预算较大(如1000 x尺寸)时,非常适合控制(如神经控制)。

TBPSA:非常适用于噪声污染问题,尤其是超参数(神经)问题;非常高的num_workers正常)。

PSO:在健壮性方面非常出色,高数量num_workers也可以。

ScrHammersleySearchPlusMiddlePoint:对于超级并行情况(完全一次性,即num_workers=包含预算)或非常多模式的情况(例如我们的一些MLDA问题)非常适用;不要对这个优化器使用softmax。

RandomSearch:是经典的随机搜索基线;不要对这个优化器使用softmax。

你可能感兴趣的:(python,算法)