gpflow 模型预测说输入应该是一个双张量但是是一个浮点张量
gpflow model prediction says input was expected to be a double tensor but is a float tensor
我正在尝试 运行 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)
returns 出现以下错误:
InvalidArgumentError: cannot compute AddV2 as input #1(zero-based) was
expected to be a double tensor but is a float tensor [Op:AddV2] name:
add/
我有windows10,python3.6,tensorflow 2.0,tensorflow概率0.9,
并且 gpflow 安装了
点安装 -e 。
2020 年 2 月 21 日的命令。
你能帮我解决这个问题吗?
我确实将输入转换为双倍,所以我认为可能是 gpflow 更新了
代码而不是教程。
您遇到的问题是由于我们在 GPflow 中更新参数值的新方法。而不是做 model.parameter = value
你应该使用 assign
:
m.likelihood.variance.assign(0.01)
这可以确保参数的类型没有改变。
在将内核的 lengthscale
设置为 0.25
后,我能够得到以下图。
我在这里问(并回答了自己)同样的问题:GPFlow-2.0 - issue with default_float and likelihood variance
一般来说,如果您尝试使用 gpflow 2.0,我建议您不要使用 readthedocs 上的示例。相反,克隆 github 存储库并使用那里的示例笔记本 - 这些笔记本大多已更新以与 gpflow 2 一起正常工作。
例如,您的回归示例的更新版本可在此处获得:https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/basics/regression.pct.py
此版本适用于 gpflow 2。
我正在尝试 运行 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)
returns 出现以下错误:
InvalidArgumentError: cannot compute AddV2 as input #1(zero-based) was expected to be a double tensor but is a float tensor [Op:AddV2] name: add/
我有windows10,python3.6,tensorflow 2.0,tensorflow概率0.9, 并且 gpflow 安装了 点安装 -e 。 2020 年 2 月 21 日的命令。
你能帮我解决这个问题吗? 我确实将输入转换为双倍,所以我认为可能是 gpflow 更新了 代码而不是教程。
您遇到的问题是由于我们在 GPflow 中更新参数值的新方法。而不是做 model.parameter = value
你应该使用 assign
:
m.likelihood.variance.assign(0.01)
这可以确保参数的类型没有改变。
在将内核的 lengthscale
设置为 0.25
后,我能够得到以下图。
我在这里问(并回答了自己)同样的问题:GPFlow-2.0 - issue with default_float and likelihood variance
一般来说,如果您尝试使用 gpflow 2.0,我建议您不要使用 readthedocs 上的示例。相反,克隆 github 存储库并使用那里的示例笔记本 - 这些笔记本大多已更新以与 gpflow 2 一起正常工作。
例如,您的回归示例的更新版本可在此处获得:https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/basics/regression.pct.py
此版本适用于 gpflow 2。