def test_L2NormPenaltyNode(self): max_allowed_rel_err = 1e-5 l2_reg = np.array(4.0) w = nodes.ValueNode("w") l2_norm_node = nodes.L2NormPenaltyNode(l2_reg, w, "l2 norm node") d = (5) init_vals = {"w":np.array(np.random.standard_normal(d))} max_rel_err = test_utils.test_node_backward(l2_norm_node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < max_allowed_rel_err)
def test_backward_SquaredL2DistanceNode_2d_array(self): dims = (10, 10) init_vals = { "a": np.array(np.random.standard_normal(dims)), "b": np.array(np.random.standard_normal(dims)), } max_rel_err = test_utils.test_node_backward(self.l2_node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < self.max_allowed_rel_err)
def test_TanhNode(self): a = nodes.ValueNode(node_name="a") tanh_node = nodes.TanhNode(a, "tanh") m = 8 d = 5 init_vals = {"a":np.random.randn(m,d)} max_rel_err = test_utils.test_node_backward(tanh_node, init_vals, delta=1e-7) max_allowed_rel_err = 1e-5 self.assertTrue(max_rel_err < max_allowed_rel_err)
def test_backward_VectorScalarAffineNode(self): n_ftrs = 5 init_vals = { "w": np.random.randn(n_ftrs), "x": np.random.randn(n_ftrs), "b": np.array(np.random.randn()), } max_rel_err = test_utils.test_node_backward(self.affine_node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < self.max_allowed_rel_err)
def test_backward_SquaredL2DistanceNode_1d_array(self): # Not used for linear regression, but can also apply the # node to higher dimensional arrays dims = 10 init_vals = { "a": np.array(np.random.standard_normal(dims)), "b": np.array(np.random.standard_normal(dims)), } max_rel_err = test_utils.test_node_backward(self.l2_node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < self.max_allowed_rel_err)
def test_SumNode(self): max_allowed_rel_err = 1e-5 a = nodes.ValueNode("a") b = nodes.ValueNode("b") dims = () a_val = np.array(np.random.standard_normal(dims)) b_val = np.array(np.random.standard_normal(dims)) sum_node = nodes.SumNode(a, b, "sum node") init_vals = {"a":a_val, "b":b_val} max_rel_err = test_utils.test_node_backward(sum_node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < max_allowed_rel_err)
def test_AffineNode(self): W = nodes.ValueNode(node_name="W") x = nodes.ValueNode(node_name="x") b = nodes.ValueNode(node_name="b") affine_node = nodes.AffineNode(W, x, b, "affine") m = 8 d = 5 init_vals = {"W":np.random.randn(m,d), "b":np.random.randn(m), "x":np.random.randn(d)} max_rel_err = test_utils.test_node_backward(affine_node, init_vals, delta=1e-7) max_allowed_rel_err = 1e-5 self.assertTrue(max_rel_err < max_allowed_rel_err)
def test_backward_SquaredL2DistanceNode(self): max_allowed_rel_err = 1e-5 a = nodes.ValueNode("a") b = nodes.ValueNode("b") node = nodes.SquaredL2DistanceNode(a, b, "L2 dist node") dims = () init_vals = { "a": np.array(np.random.standard_normal(dims)), "b": np.array(np.random.standard_normal(dims)) } max_rel_err = test_utils.test_node_backward(node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < max_allowed_rel_err) # Not used for linear regression, but can also apply the # node to higher dimensional arrays dims = (10) init_vals = { "a": np.array(np.random.standard_normal(dims)), "b": np.array(np.random.standard_normal(dims)) } max_rel_err = test_utils.test_node_backward(node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < max_allowed_rel_err) dims = (10, 10) init_vals = { "a": np.array(np.random.standard_normal(dims)), "b": np.array(np.random.standard_normal(dims)) } max_rel_err = test_utils.test_node_backward(node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < max_allowed_rel_err)
def test_backward_VectorScalarAffineNode(self): max_allowed_rel_err = 1e-5 w = nodes.ValueNode("w") x = nodes.ValueNode("x") b = nodes.ValueNode("b") affine_node = nodes.VectorScalarAffineNode(x, w, b, "affine node") num_ftrs = 5 init_vals = { "w": np.random.randn(num_ftrs), "x": np.random.randn(num_ftrs), "b": np.array(np.random.randn()) } max_rel_err = test_utils.test_node_backward(affine_node, init_vals, delta=1e-7) self.assertTrue(max_rel_err < max_allowed_rel_err)