def test_mul6(self): x = d.Variable(array([[3, 1], [2, 1]]), 'x') y = d.Variable(array([4]), 'y') z = x * y t = z.forward() z.backward(array([[1, 2], [1, 2]])) self.assertTrue(arr_equal(t, array([[12, 4], [8, 4]]))) self.assertTrue(arr_equal(x.grad, array([[4, 8], [4, 8]]))) self.assertTrue(arr_equal(y.grad, array([9])))
def test_mul4(self): x = d.Variable(array([3, 1]), 'x') y = d.Variable(array([4]), 'y') z = y * x t = z.forward() z.backward(array([1, 2])) self.assertTrue(arr_equal(t, array([12, 4]))) self.assertTrue(arr_equal(x.grad, array([4, 8]))) self.assertTrue(arr_equal(y.grad, array([5])))
def test_mul1(self): x = d.Variable(array([3, 1]), 'x') y = d.Variable(array([4, 6]), 'y') z = x * y t = z.forward() z.backward(array([1, 1])) self.assertTrue(arr_equal(t, array([12, 6]))) self.assertTrue(arr_equal(x.grad, array([4, 6]))) self.assertTrue(arr_equal(y.grad, array([3, 1])))
def test_sub_broadcast6(self): x = d.Variable(array([[2.0, 3.0], [5.0, 6.0]]), 'x') y = d.Variable(array([6.0]), 'y') z = x - y t = z.forward() self.assertTrue(arr_equal(t, array([[-4, -3], [-1, 0]]))) z.backward(array([[1.0, 1.0], [1, 1]])) self.assertTrue(arr_equal(x.grad, array([[1.0, 1.0], [1, 1]]))) self.assertTrue(arr_equal(y.grad, -array([4])))
def test_mul8(self): x = d.Variable(array([[3, 1], [2, 1]]), 'x') y = d.Variable(array([4, 5]), 'y') z = y * x t = z.forward() z.backward(array([[1, 2], [1, 2]])) self.assertTrue(arr_equal(t, array([[12, 5], [8, 5]]))) self.assertTrue(arr_equal(x.grad, array([[4, 10], [4, 10]]))) self.assertTrue(arr_equal(y.grad, array([5, 4])))
def test_div4(self): y = d.Variable(np.array([4, 2]), 'x') x = d.Variable(np.array([2]), 'y') z = x / y t = z.forward() self.assertTrue(arr_equal(t, array([0.5, 1]))) z.backward(np.array([2, 1])) self.assertTrue(arr_equal(x.grad, array([1]))) self.assertTrue(arr_equal(y.grad, array([-0.25, -0.5])))
def test_sub_broadcast5(self): x = d.Variable(array([[2.0, 3.0], [5.0, 6.0]]), 'x') y = d.Variable(array([6.0]), 'y') z = y - x t = z.forward() self.assertTrue(arr_equal(t, array([[4, 3], [1, 0]]))) z.backward(array([[1.0, 1.0], [2, 1]])) self.assertTrue(arr_equal(x.grad, -array([[1.0, 1.0], [2, 1]]))) self.assertTrue(arr_equal(y.grad, array([5])))
def test_sub_broadcast1(self): x = d.Variable(array([2.0, 3.0]), 'x') y = d.Variable(array([6.0]), 'y') z = x - y t = z.forward() self.assertTrue(arr_equal(t, array([-4, -3]))) z.backward(array([1.0, 2.0])) self.assertTrue(arr_equal(x.grad, array([1, 2]))) self.assertTrue(arr_equal(y.grad, array([-3])))
def test_add_broadcast6(self): x = d.Variable(array([[2.0, 3.0], [5.0, 6.0]]), 'x') y = d.Variable(array([6.0]), 'y') z = y + x t = z.forward() self.assertTrue(arr_equal(t, array([[8, 9], [11, 12]]))) z.backward(array([[1.0, 1.0], [2, 1]])) self.assertTrue(arr_equal(x.grad, array([[1.0, 1.0], [2, 1]]))) self.assertTrue(arr_equal(y.grad, array([5])))
def test_sub(self): x = d.Variable(array([2.0, 3.0]), 'x') y = d.Variable(array([6.0, 7.0]), 'y') z = x - y t = z.forward() self.assertTrue(arr_equal(t, array([-4, -4]))) z.backward(array([2.0, 1.0])) self.assertTrue(arr_equal(x.grad, array([2, 1]))) self.assertTrue(arr_equal(y.grad, -array([2, 1])))
def test_div7(self): x = d.Variable(np.array([[4, 2], [4, 2]]), 'x') y = d.Variable(np.array([2, 2]), 'y') z = x / y t = z.forward() self.assertTrue(arr_equal(t, array([[2, 1], [2, 1]]))) z.backward(np.array([[2, 1], [2, 1]])) self.assertTrue(arr_equal(x.grad, array([[1, 0.5], [1, 0.5]]))) self.assertTrue(arr_equal(y.grad, array([-4, -1])))
def test_add_broadcast3(self): x = d.Variable(array([2.0, 3.0]), 'x') y = d.Variable(array([6.0]), 'y') z = y + x t = z.forward() self.assertTrue(arr_equal(t, array([8, 9]))) z.backward(array([1.0, 1.0])) self.assertTrue(arr_equal(x.grad, array([1, 1]))) self.assertTrue(arr_equal(y.grad, array([2])))
def test_min1(self): x = d.Variable(array([[1, 2], [-1, -2]]), 'x') y = d.Variable(array([[2, 1], [0, -3]]), 'y') z = d.min(x, y) t = z.forward() self.assertTrue(arr_equal(t, array([[1, 1], [-1, -3]]))) z.backward(array([[2, 2], [2, 2]])) self.assertTrue(arr_equal(y.grad, array([[0, 2], [0, 2]]))) self.assertTrue(arr_equal(x.grad, array([[2, 0], [2, 0]])))
def test_div8(self): x = d.Variable(np.array([[4, 2], [4, 2]]), 'x') y = d.Variable(np.array([2, 2]), 'y') z = y / x t = z.forward() self.assertTrue(arr_equal(t, array([[0.5, 1], [0.5, 1]]))) z.backward(np.array([[2, 1], [2, 1]])) self.assertTrue(arr_equal(x.grad, array([[-0.25, -0.5], [-0.25, -0.5]]))) self.assertTrue(arr_equal(y.grad, array([1, 1])))
def test_add(self): x = d.Variable(array([2.0, 3.0]), 'x') y = d.Variable(array([6.0, 7.0]), 'y') z = x + y t = z.forward() self.assertTrue(arr_equal(t, array([8, 10]))) z.backward(array([2.0, 2.0])) self.assertTrue(arr_equal(x.grad, array([2, 2]))) self.assertTrue(arr_equal(y.grad, array([2, 2])))
def test_div2(self): x = d.Variable(np.array([4, 8]), 'x') y = d.Variable(np.array([2, 4]), 'y') z = y / x t = z.forward() self.assertTrue(arr_equal(t, array([0.5, 0.5]))) z.backward(np.array([2, 1])) self.assertTrue(arr_equal(x.grad, array([-0.25, -1 / 16]))) self.assertTrue(arr_equal(y.grad, array([0.5, 0.125])))
def test_div1(self): x = d.Variable(np.array([4]), 'x') y = d.Variable(np.array([2]), 'y') z = x / y t = z.forward() self.assertTrue(arr_equal(t, array([2]))) z.backward(np.array([2])) self.assertTrue(arr_equal(x.grad, array([1]))) self.assertTrue(arr_equal(y.grad, array([-2])))
def test_mmul2(self): w_ = np.array([2, 3, 4]) b_ = np.array([3, 4, 5]) w = d.Variable(w_, 'w') b = d.Variable(b_, 'b') z = w @ b t = z.forward() self.assertTrue(arr_equal(t, array(38))) z.backward(array([2])) self.assertTrue(arr_equal(w.grad, array([6, 8, 10]))) self.assertTrue(arr_equal(b.grad, array([4, 6, 8])))
def test_mmul1(self): w_ = np.array([[2, 3, 4], [1, 2, 3]]) b_ = np.array([3, 4, 5]) w = d.Variable(w_, 'w') b = d.Variable(b_, 'b') z = w @ b t = z.forward() self.assertTrue(arr_equal(t, array([38, 26]))) z.backward(array([2, 1])) self.assertTrue(arr_equal(w.grad, array([[6, 8, 10], [3, 4, 5]]))) self.assertTrue(arr_equal(b.grad, array([5, 8, 11])))
def test_min2(self): x = d.Variable(array([[1, 2], [-1, -2]]), 'x') z = d.min(0, x) t = z.forward() self.assertTrue(arr_equal(t, array([[0, 0], [-1, -2]]))) z.backward(array([[2, 2], [2, 2]])) self.assertTrue(arr_equal(x.grad, array([[0, 0], [2, 2]])))
def test_div9(self): x = d.Variable(np.array([1, 2]), 'x') z = 2 / x t = z.forward() self.assertTrue(arr_equal(t, array([2, 1]))) z.backward(np.array([1, 2])) self.assertTrue(arr_equal(x.grad, array([-2, -1])))
x1 = np.random.randn(N, DIM) x2 = np.random.randn(N, DIM) y1 = np.ones(N) y2 = -np.ones(N) x1 += np.array([1, 1]) x2 += np.array([-1, -1]) X = np.concatenate((x1, x2), axis=0) Y = np.concatenate((y1, y2)) data = dllib.Placeholder((2 * N, 2)) data.feed(X) label = dllib.Placeholder((2 * N, )) label.feed(Y) w = dllib.Variable(np.array([0.0, 0.0]), 'w') b = dllib.Variable(np.array([0.0]), 'b') t = data @ w + b loss = logistic_loss_with_logits(t, label) optimizer = GradientDescent(loss, 0.01) optimizer.optimize(500) pred = np.sign(t.forward()) acc = pred[((pred - Y) == 0)].size / (2 * N) print("accuracy is: {0}".format(acc)) plt.plot(X[:N, 0], X[:N, 1], 'r*') plt.plot(X[N:2 * N, 0], X[N:2 * N, 1], 'g*') plt.show()