gpflow模型预测表明输入应为双张量,但为浮点张量

问题描述 投票:1回答:1

我正在尝试运行gpflow教程中的代码:https://gpflow.readthedocs.io/en/stable/notebooks/regression.html但是,它不起作用。

以下代码:

N = 12
X = np.random.rand(N,1)
Y = np.sin(12*X) + 0.66*np.cos(25*X) + np.random.randn(N,1)*0.1 + 3
plt.plot(X, Y, 'kx', mew=2)

k = gpflow.kernels.Matern52(variance=1.0, lengthscale=1.0)
m = gpflow.models.GPR((X, Y), k, mean_function=None, noise_variance=1.0)
m.likelihood.variance = 0.01

def plot(m):
    xx = np.linspace(-0.2, 1.2, 141)[:,None]
    xx=tf.convert_to_tensor(xx,dtype=tf.float64)
    mean, var = m.predict_y(xx)
    plt.figure(figsize=(12, 6))
    plt.plot(X, Y, 'kx', mew=2)
    plt.plot(xx, mean, 'b', lw=2)
    plt.fill_between(xx[:,0], mean[:,0] - 2*np.sqrt(var[:,0]), mean[:,0] + 2*np.sqrt(var[:,0]), color='blue', alpha=0.2)
    plt.xlim(-0.1, 1.1)
plot(m)

返回以下错误:

InvalidArgumentError:无法将AddV2计算为输入#1(基于零)应该是双张量,但是浮点张量[Op:AddV2]名称:添加/

我有Windows 10,python 3.6,tensorflow 2.0,tensorflow概率0.9,并安装了gpflowpip install -e。于2020年2月21日发出命令。

您能帮我吗?我确实将输入转换为两倍,所以我认为可能是gpflow已更新代码而不是教程。

tensorflow double gaussian tensor gpflow
1个回答
1
投票

您遇到的问题是由于我们在GPflow中更新参数值的新方法。代替执行model.parameter = value,您应该使用assign

m.likelihood.variance.assign(0.01) 

这可确保参数的类型未更改。

在将内核的lengthscale设置为0.25之后,我能够得到以下图表。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.