pypesto中的pymc3采样器出错:theano.graph.fg丢失输入计算机错误

2024-09-29 19:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个贝叶斯推理问题,在windows笔记本电脑上使用pypesto提供的pymc3采样器时遇到了问题。为了确保我可以使用采样器运行,我创建了一个简单的虚拟目标来使用

我安装并创建一个conda(我尝试了3.7和3.8)环境,并使用pip3/pip安装pymc3和theano模块。我尝试了pymc3/theano的几个不同版本,并成功地导入了它们。但是,有一条错误消息,我不知道如何处理。我曾尝试在网上寻找解决方案,但也找不到。我目前安装了pymc3和theano的最新版本(分别为3.11.0和1.0.5)。这是消息的最后一行

theano.graph.fg.MissingInputError: Input 0 of the graph (indices start from 0), used to compute sigmoid(x2_interval__), was not provided and not given a value. Use the Theano flag exception_verbosity='high', for more information on this error.

以下是完整的信息:

Sampling 1 chain for 1_000 tune and 100 draw iterations (1_000 + 100 draws total) took 7 seconds.
Traceback (most recent call last):
  File "samplingPymc3.py", line 70, in <module>
    result2 = sample.sample(problem1, 100, sampler2, x0=np.array([0,0]))
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\pypesto\sample\sample.py", line 68, in sample
    sampler.sample(n_samples=n_samples)
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\pypesto\sample\pymc3.py", line 102, in sample
    **self.options)
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\pymc3\sampling.py", line 637, in sample
    idata = arviz.from_pymc3(trace, **ikwargs)
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\arviz\data\io_pymc3.py", line 559, in from_pymc3
    density_dist_obs=density_dist_obs,
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\arviz\data\io_pymc3.py", line 163, in __init__
    self.observations, self.multi_observations = self.find_observations()
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\arviz\data\io_pymc3.py", line 176, in find_observations
    multi_observations[key] = val.eval() if hasattr(val, "eval") else val
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\graph\basic.py", line 554, in eval
    self._fn_cache[inputs] = theano.function(inputs, self)
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\compile\function\__init__.py", line 350, in function
    output_keys=output_keys,
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\compile\function\pfunc.py", line 532, in pfunc
    output_keys=output_keys,
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\compile\function\types.py", line 1978, in orig_function
    name=name,
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\compile\function\types.py", line 1584, in __init__
    fgraph, additional_outputs = std_fgraph(inputs, outputs, accept_inplace)
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\compile\function\types.py", line 188, in std_fgraph
    fgraph = FunctionGraph(orig_inputs, orig_outputs, update_mapping=update_mapping)
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\graph\fg.py", line 162, in __init__
    self.import_var(output, reason="init")
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\graph\fg.py", line 330, in import_var
    self.import_node(var.owner, reason=reason)
  File "C:\Users\germa\anaconda3\envs\sampling\lib\site-packages\theano\graph\fg.py", line 383, in import_node
    raise MissingInputError(error_msg, variable=var)
theano.graph.fg.MissingInputError: Input 0 of the graph (indices start from 0), used to compute sigmoid(x2_interval__), was not provided and not given a value. Use the Theano flag exception_verbosity='high', for more information on this error.

我在某处读到,问题可能在于使用的arviz版本,但在我的案例中,这似乎不是问题所在。 我想包括我正在运行的脚本。以下是脚本的代码:

import numpy as np
import scipy as sp
import scipy.optimize as so
from scipy.stats import multivariate_normal
import pypesto
import pypesto.sample as sample
from pypesto import Objective

A = np.array([[2.0, 0.0], [0.0, 1.0]])
b = np.array([2.0, 1.0])
x_init = np.array([3.4302, 2.915])
x_true = np.array([1.0, 1.0])
temp = lambda x: A.dot(x) - b
f = lambda x: .5 * np.linalg.norm(temp(x))
A_t = A.transpose()
K = np.dot(A_t, A)
df = lambda x: K.dot(x) - A_t.dot(b)


def obj1(x):
    # f_val = f(x)
    # grad = df(x)
    return (f(x), df(x))


objfun = lambda x: obj1(x)
dim_full = 2
lb = -10 * np.ones((dim_full, 1))
ub = 10 * np.ones((dim_full, 1))
x_names = ['x1', 'x2']
# step_fcn = pymc3.step_methods.hmc.hmc.HamiltonianMC
objective = pypesto.Objective(fun=objfun, grad=True, hess=False)
problem1 = pypesto.Problem(objective=objective, lb=lb, ub=ub, x_names=x_names)
sampler = sample.AdaptiveMetropolisSampler()
print('function val: ', objfun(x_init))
sampler2 = sample.Pymc3Sampler()
result2 = sample.sample(problem1, 100, sampler2, x0=np.array([0, 0]))
print('Done sampling!')

提前感谢您的帮助


Tags: sampleinpylibpackageslinesitetheano

热门问题