Я пытаюсь выполнить байесовскую калибровку с помощью PyMC3; однако моя модельная функция требует сравнения массивов переменных Theano.
Вот иллюстрация проблемы:
import theano.tensor as tt
# create an example of array of Theano variables
a=np.array([tt.as_tensor_variable(1)*1,tt.as_tensor_variable(1)*2])
# try to apply operations of comparison
tt.gt(a,1)
->AsTensorError: ('Cannot convert [Elemwise{mul,no_inplace}.0 Elemwise{mul,no_inplace}.0] to TensorType', <class 'numpy.ndarray'>)*
a>1
-> TypeError: Variables do not support boolean operations.
Кто-нибудь знает, как с этим справиться?
Если у вас уже есть NumPy ndarray
из TensorVariables
, вы можете вывести его в список:
a = np.array([tt.as_tensor_variable(1)*1, tt.as_tensor_variable(1)*2])
res = tt.gt(a.tolist(), 1)
res.eval()
# array([False, True])
Однако, если вы можете, я бы вообще избегал NumPy.
a = [tt.as_tensor_variable(1)*1, tt.as_tensor_variable(1)*2]
res = tt.gt(a, 1)
res.eval()
# array([False, True])
Более того, тип TensorVariable
уже имеет полную поддержку многомерности, и, придерживаясь методов в theano.tensor
, можно получить более эффективную производительность, чем переход туда и обратно к list
или ndarray
объектам. Например,
a = tt.as_tensor([1,2])
res = tt.gt(a, 1)
res.eval()
# array([False, True])
Спасибо ! На самом деле я использую существующую функцию модели, разработанную с помощью numpy и pandas, поэтому я бы не хотел переписывать все в теано.