【问题标题】:GPyTorch, how to set initial value for "lengthscale" hyperparameter?GPyTorch,如何为“lengthscale”超参数设置初始值?
【发布时间】:2020-12-16 02:40:16
【问题描述】:

我正在根据documentation 使用 GPyTorch 回归器。

我想为 RBF 内核中的“lengthscale”超参数设置一个初始值。

我想设置一个常数作为“lengthscale”的初始值(类似于我们在 scikit-learn Gaussian Process Regressor 中可以做的)。

如果你有任何想法,请告诉我。

【问题讨论】:

    标签: kernel hyperparameters gpytorch


    【解决方案1】:

    您的问题有两种情况:

    1. 你想用一些值来初始化你的长度,但是长度会被优化器进一步优化

      假设您的模型与您链接的文档中给出的模型相同,只需在训练循环之前添加以下内容:

      init_lengthscale = 0.1
      model.covar_module.base_kernel.lengthscale = init_lengthscale
      

      model.covar_module 获取您的整个内核,base_kernel 获取您的 RBF 内核。

    2. 您希望将长度刻度固定为不会进一步优化的常数值

      除了第一种情况的代码之外,您不要将长度尺度作为超参数提供给优化器进行优化。

      all_params = set(exactModel.parameters())
      final_params = list(all_params - {exactModel.covar_module.base_kernel.raw_lengthscale})
      optimizer = torch.optim.Adam(final_params, lr=0.1)
      

      我们从all_params 中删除一组原始长度尺度值以创建final_params,然后将其传递给优化器。

    一些帮助来源:

    【讨论】:

    • 谢谢。我应该在代码的哪一部分使用“model.covar_module.base_kernel.lengthscale = init_lengthscale”?是在“model = ExactGPModel(train_x, train_y,likelihood)”初始化模型之后吗?
    • @Mohammad:是的。在初始化模型之后和开始训练循环之前,您应该能够在任何地方使用它。它显然应该在训练循环之外。
    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多