GPflow 2.9.0中线性均值函数先验未在监控器显示的问题排查
GPflow 2.9.0线性均值函数先验未在监控器显示的问题
在GPflow 2.9.0版本的模型中,为线性均值函数的参数设置了先验,但通过监控器查看时,这些先验并未显示。相关代码如下:
import gpflow import numpy as np import tensorflow_probability as tfp import tensorflow as tf A = gpflow.Parameter(np.zeros(1)) A.prior=tfp.distributions.Normal(loc=1.0, scale=10.0) b = gpflow.Parameter(np.zeros(1)) b.prior=tfp.distributions.Normal(loc=1.0, scale=10.0) mf = gpflow.functions.Linear(A,b) # 仅简化展示均值部分,未写出模型其他组件(核函数、似然等)
问题原因
你手动创建的A和b参数,在传入Linear函数后并没有被纳入GPflow模型的参数跟踪体系——Linear内部会将传入的参数包装为自己的内部参数实例,而你给原始A、b设置的先验,绑定的是外部未被模型追踪的参数对象,因此监控器无法识别到这些先验。
解决方法
有两种正确的实现方式,确保先验绑定到Linear函数内部被模型跟踪的参数上:
方式一:初始化Linear时直接定义带先验的参数
import gpflow import numpy as np import tensorflow_probability as tfp import tensorflow as tf mf = gpflow.functions.Linear( gpflow.Parameter(np.zeros(1), prior=tfp.distributions.Normal(loc=1.0, scale=10.0)), gpflow.Parameter(np.zeros(1), prior=tfp.distributions.Normal(loc=1.0, scale=10.0)) )
方式二:创建Linear后访问内部参数设置先验
import gpflow import numpy as np import tensorflow_probability as tfp import tensorflow as tf mf = gpflow.functions.Linear(np.zeros(1), np.zeros(1)) # 直接访问Linear的内部参数A和b设置先验 mf.A.prior = tfp.distributions.Normal(loc=1.0, scale=10.0) mf.b.prior = tfp.distributions.Normal(loc=1.0, scale=10.0)
采用上述任意一种方式后,监控器就能正确识别并显示线性均值函数参数的先验配置。
内容的提问来源于stack exchange,提问作者LePe77it
相关产品推荐
相关产品推荐

