Ошибка типа: если RV не является чистым распределением, переменная значения должна иметь тот же тип.Python

Программы на Python
Ответить
Anonymous
 Ошибка типа: если RV не является чистым распределением, переменная значения должна иметь тот же тип.

Сообщение Anonymous »

Из этой статьи ЗДЕСЬ, опубликованной в журнале «PeerJ Comput. Sci». Я взял последний код (стр. 28):

Код: Выделить всё

import pymc as pm
import pytensor
import pytensor.tensor as pt

a = pm.Uniform.dist()
b = pm.Normal.dist(mu=a, sigma=1)
x = b + pt.as_tensor([2, 3, 4])
x_draws = pm.draw(x, draws=1_000)
x_logp = pm.logp(rv=x, value=[x_draws]).eval()
Это приводит к длинной ошибке, которую я не понимаю:

Код: Выделить всё

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
~\anaconda3\lib\site-packages\pymc\distributions\logprob.py in logp(rv, value)
176     try:
--> 177         return logp_logprob(rv, value)
178     except NotImplementedError:

~\anaconda3\lib\site-packages\pymc\logprob\abstract.py in logprob(rv_var, *rv_values, **kwargs)
52     """Create a graph for the log-probability of a ``RandomVariable``."""
---> 53     logprob = _logprob(rv_var.owner.op, rv_values, *rv_var.owner.inputs, **kwargs)
54

~\anaconda3\lib\functools.py in wrapper(*args, **kw)
876
--> 877         return dispatch(args[0].__class__)(*args, **kw)
878

~\anaconda3\lib\site-packages\pymc\logprob\abstract.py in _logprob(op, values, *inputs, **kwargs)
93     """
---> 94     raise NotImplementedError(f"Logprob method not implemented for {op}")
95

NotImplementedError: Logprob method not implemented for Elemwise{add,no_inplace}

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
~\anaconda3\lib\site-packages\pymc\distributions\logprob.py in logp(rv, value)
179         try:
--> 180             value = rv.type.filter_variable(value)
181         except TypeError as exc:

~\anaconda3\lib\site-packages\pytensor\tensor\type.py in filter_variable(self, other, allow_convert)
271
--> 272         raise TypeError(
273             f"Cannot convert Type {other.type} "

TypeError: Cannot convert Type TensorType(float64, (1, 1000, 3)) (of Variable TensorConstant{[[[3.41809..6263971]]]}) into Type TensorType(float64, (3,)). You can try to manually convert TensorConstant{[[[3.41809..6263971]]]} into a TensorType(float64, (3,)).

The above exception was the direct cause of the following exception:

TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_129020\3313924450.py in 
8 x = b + pt.as_tensor([2, 3, 4])
9 x_draws = pm.draw(x, draws=1_000)
---> 10 x_logp = pm.logp(rv=x, value=[x_draws]).eval()

~\anaconda3\lib\site-packages\pymc\distributions\logprob.py in logp(rv, value)
180             value = rv.type.filter_variable(value)
181         except TypeError as exc:
--> 182             raise TypeError(
183                 "When RV is not a pure distribution, value variable must have the same type"
184             ) from exc

TypeError: When RV is not a pure distribution, value variable must have the same type
Может кто-нибудь объяснить, в чем на самом деле проблема?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»