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。