You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GPFlow中固定二维核长度尺度的单个维度并优化其余维度?

如何在GPFlow中固定RBF核的单个长度尺度维度

我刚好碰到过类似的需求,给你两种简单可行的方案,不用复杂的变换就能搞定~

方案一:直接设置参数的可训练掩码

GPFlow的Parameter对象支持通过trainable_mask来指定哪些维度可以被优化。你可以在定义完模型后,直接给lengthscales参数设置掩码,让第一个维度可训练、第二个维度固定:

# 你的原始代码
k = gpflow.kernels.RBF(lengthscales=[24*5,1e-5])
m = gpflow.models.GPR(data=(X,Y), kernel=k, mean_function=None)

# 设置可训练掩码:第一个维度允许优化,第二个维度固定
m.kernel.lengthscales.trainable_mask = [True, False]

这样在后续调用优化器(比如gpflow.optimizers.Scipy().minimize(m.training_loss, m.trainable_variables))的时候,只有第一个长度尺度会被更新,第二个维度的数值会保持你初始设置的1e-5不变。

方案二:拆分核为多个一维核的乘积

如果你习惯了GPy里分维度控制的方式,可以把多维RBF核拆成多个一维RBF核的乘积,这样每个维度的长度尺度是独立的参数,能更直观地控制是否训练:

# 分别定义两个一维RBF核,指定各自作用的维度
kernel_dim0 = gpflow.kernels.RBF(lengthscales=24*5, active_dims=[0])  # 作用于第0维度
kernel_dim1 = gpflow.kernels.RBF(lengthscales=1e-5, active_dims=[1])  # 作用于第1维度

# 组合成乘积核,效果和多维RBF核一致
k = kernel_dim0 * kernel_dim1

# 固定第二个维度的长度尺度
gpflow.set_trainable(kernel_dim1.lengthscales, False)

# 构建GPR模型
m = gpflow.models.GPR(data=(X,Y), kernel=k, mean_function=None)

这种方式的好处是结构清晰,后续如果需要调整其他维度的训练状态,直接对对应的一维核操作就行,非常灵活。

两种方案都能达到你想要的效果,看你更喜欢哪种风格啦~

内容的提问来源于stack exchange,提问作者lionfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:57:44