def test_differentiate_compound_add(self): self.assertEqual(differentiate(add(3, add('x', 4)), {'x': 2}), 1) self.assertEqual( differentiate(add('x', add('y', 3)), { 'x': 2, 'y': 5 }), 1)
def test_add_var_diff(self): x = add(3, 'x') self.assertEqual(3, x.in1) self.assertEqual('x', x.in2) self.assertEqual(x.diff({'x': 2}), 1) self.assertEqual(0, x.local_grad1) self.assertEqual(1, x.local_grad2)
def test_add_var_evaluate(self): x = add(3, 'x') self.assertEqual(3, x.in1) self.assertEqual('x', x.in2) self.assertEqual(x.evaluate({'x': 2}), 5) self.assertEqual(3, x.in1) self.assertEqual(2, x.in2)
def test_add_const_diff(self): x = add(3, 4) self.assertEqual(3, x.in1) self.assertEqual(4, x.in2) self.assertEqual(x.diff({}), 0) self.assertEqual(0, x.local_grad1) self.assertEqual(0, x.local_grad2)
def test_add_const_evaluate(self): x = add(3, 4) self.assertIsInstance(x, add) self.assertEqual(3, x.in1) self.assertEqual(4, x.in2) self.assertEqual(x.evaluate({}), 7) self.assertEqual(3, x.in1) self.assertEqual(4, x.in2)
def test_differentiate_compount_ops(self): self.assertEqual( differentiate(add(3, multiply('x', 'x')), { 'x': 2, 'y': 5 }), 4) self.assertEqual( differentiate( add(3, add(multiply(2, 'x'), multiply('x', multiply('x', 'x')))), {'x': 2}), 14) self.assertEqual( differentiate( add( 3, add(multiply(2, multiply('x', 'x')), multiply(4, multiply('x', multiply('x', 'x'))))), {'x': 2}), 56)
def test_evaluate_compound_ops(self): self.assertEqual( evaluate(add(3, multiply('x', 'x')), { 'x': 2, 'y': 5 }), 7) self.assertEqual( evaluate( add(3, add(multiply(2, 'x'), multiply('x', multiply('x', 'x')))), {'x': 2}), 15) self.assertEqual( evaluate( add( 3, add(multiply(2, multiply('x', 'x')), multiply(4, multiply('x', multiply('x', 'x'))))), {'x': 2}), 43)
def loss_func(self, feed_dict={}): batch_size = feed_dict["predicted_y"].shape[0] return ad.add( ad.negative( ad.__getitem__( ad.Placeholder(feed_dict["predicted_y"]), ad.Constant( tuple([range(batch_size), feed_dict["true_y"].ravel()])))), ad.log( ad.sum(ad.exp(ad.Placeholder(feed_dict["predicted_y"])), axis=1)))
def test_evaluate_compound_add(self): self.assertEqual(evaluate(add(3, add('x', 4)), {'x': 2}), 9) self.assertEqual(evaluate(add('x', add('y', 3)), {'x': 2, 'y': 5}), 10)
def test_evaluate_simple_add(self): self.assertEqual(evaluate(add(3, 'x'), {'x': 2}), 5) self.assertEqual(evaluate(add(3, 3), {}), 6) self.assertEqual(evaluate(add('x', 'y'), {'x': 1, 'y': 2}), 3)
def test_differentiate_simple_add(self): self.assertEqual(differentiate(add(3, 'x'), {'x': 2}), 1) self.assertEqual(differentiate(add(3, 3), {}), 0) self.assertEqual(differentiate(add('x', 'y'), {'x': 1, 'y': 2}), 1)
def test2(x, y, z): return ad.multiply(ad.add(ad.Variable(x), ad.Variable(y)), ad.maximum(ad.Variable(y), ad.Variable(z)))
def test(x, y, z, w): return ad.multiply( ad.add(ad.multiply(ad.Variable(x), ad.Variable(y)), ad.maximum(ad.Variable(z), ad.Variable(w))), ad.Constant(2))
def tanh(x): return ad.divide( ad.subtract(ad.Constant(1), ad.exp(ad.negative(ad.Variable(x)))), ad.add(ad.Constant(1), ad.exp(ad.negative(ad.Variable(x)))))