Я пытаюсь использовать функцию ошибок, реализованную в Theano, для подгонки модели. Я понимаю, что он возвращает комплексное значение, и Theano не может справиться с этим из-за проблем с вычислением градиента. На самом деле мне нужно вычислить функцию Фадеева, но поскольку она построена на основе функции ошибок, следующий код дает ту же ошибку и его легче читать:
x=np.linspace(-10,10,1000)
scale=2
true = tt.erf(x/scale).real
# add noise
y = true + np.random.normal(scale=.05, size=x.size)
with pm.Model() as model: # model specifications in PyMC3 are wrapped in a with-statement
# Define priors
sigma = pm.HalfCauchy('sigma', beta=10, testval=1.)
scale = pm.HalfNormal('scale', sigma=20)
mu=tt.erf(x/scale).real
# Define likelihood
likelihood = pm.Normal('y', mu=mu,sigma=sigma, observed=y.eval())
# Inference!
trace = pm.sample(3000, cores=2) # draw 3000 posterior samples using NUTS sampling
Ошибка хорошо известна:
TypeError: Elemwise{real,no_inplace}.grad illegally returned an integer-valued variable. (Input index 0, dtype complex128)
См., Например: вычисление теанограда «незаконно вернуло целочисленную переменную». перевернутая целочисленная переменная
Я хотел бы знать если есть возможность использовать встроенную функцию ошибок Theano для подгонки. Мои входные данные являются только действительными или мнимыми, поэтому выходные данные функции ошибок всегда мнимые или действительные, без комплексных чисел. Повторная реализация функции ошибок численно с учетом этих ограничений возможна, но не является привлекательной.
Насколько мне известно, код, представленный в этом очень важном ответе, не работает, поскольку функция возвращает комплексное значение: Как заставить scipy.special функции принимать pymc3 RV в качестве входных данных