Deterministic Theano Op - Gradient

Thank you, that was very helpful! I managed to get it to work with slight modifications (still got some errors). I found that Theano requires .nonzero() for Boolean indexing to work.

import numpy as np
import pymc3 as pm
import theano
import theano.tensor as tt

cov = np.vstack([np.asarray([-np.inf, -np.inf, np.inf]), 
             np.random.randn(2, 3)])
print(cov)
inf_mask = cov == np.inf
neg_inf_mask = cov == -np.inf
finite_mask = np.isfinite(cov)

print(cov)

cov = theano.shared(cov)
with pm.Model() as m:
    tau = pm.Normal('tau', testval=1.) # <== set a test value here to check result
    cov = tt.set_subtensor(cov[neg_inf_mask.nonzero()], tau)
    cov = tt.set_subtensor(cov[finite_mask.nonzero()], tau - cov[finite_mask.nonzero()])
    cov = tt.set_subtensor(covm[inf_mask.nonzero()], 0)

print(cov.tag.test_value)
1 Like