def get_numeric_gradient(stochastic, pvalue): e = 1e-9 initial_value = pvalue.value i_shape = shape(initial_value) i_size = size(initial_value) initial_logp = utils.logp_of_set(stochastic) numeric_gradient = zeros(i_shape) if not (pvalue.dtype in float_dtypes): return numeric_gradient for i in range(i_size): delta = zeros(i_shape) try: delta[unravel_index(i, i_shape or (1, ))] += e except IndexError: delta += e pvalue.value = initial_value + delta logp = utils.logp_of_set(stochastic) try: numeric_gradient[unravel_index(i, i_shape or (1, ))] = (logp - initial_logp) / e except IndexError: numeric_gradient = (logp - initial_logp) / e pvalue.value = initial_value return numeric_gradient
def get_numeric_gradient(stochastic, pvalue): e = 1e-9 initial_value = pvalue.value i_shape = shape(initial_value) i_size = size(initial_value) initial_logp = utils.logp_of_set(stochastic) numeric_gradient = zeros(i_shape) if not (pvalue.dtype in float_dtypes): return numeric_gradient for i in range(i_size): delta = zeros(i_shape) try: delta[unravel_index(i, i_shape or (1,))] += e except IndexError: delta += e pvalue.value = initial_value + delta logp = utils.logp_of_set(stochastic) try: numeric_gradient[unravel_index(i, i_shape or (1,))] = (logp - initial_logp) / e except IndexError: numeric_gradient = (logp - initial_logp) / e pvalue.value = initial_value return numeric_gradient
def test_other_err(self): self.B.rand() for i in xrange(1000): try: utils.logp_of_set(set([self.A,self.B,self.D,self.E])) except: cls, inst, tb = sys.exc_info() assert(cls is RuntimeError)
def test_ZeroProb(self): self.B.value = -1 for i in xrange(1000): try: utils.logp_of_set(set([self.A,self.B,self.D, self.E])) except: cls, inst, tb = sys.exc_info() assert(cls is ZeroProbability)
def test_other_err(self): self.B.rand() for i in xrange(1000): try: utils.logp_of_set(set([self.A, self.B, self.D, self.E])) except: cls, inst, tb = sys.exc_info() assert (cls is RuntimeError)
def test_ZeroProb(self): self.B.value = -1 for i in xrange(1000): try: utils.logp_of_set(set([self.A, self.B, self.D, self.E])) except: cls, inst, tb = sys.exc_info() assert (cls is ZeroProbability)
def test_logp(self): self.B.rand() lp1 = utils.logp_of_set(set([self.A,self.B,self.D])) assert_equal(lp1, self.A.logp+self.B.logp+self.D.logp)
def test_logp(self): self.B.rand() lp1 = utils.logp_of_set(set([self.A, self.B, self.D])) assert_almost_equal(lp1, self.A.logp + self.B.logp + self.D.logp, 10)