def test_div(): a = Tensor.randn(30, 40, requires_grad=True).to(Device.GPU) b = Tensor.randn(30, 40, requires_grad=True).to(Device.GPU) a_torch, b_torch = create_identical_torch_tensor(a, b) c = a / b c_torch = a_torch / b_torch c.backward() c_torch.sum().backward() check_val_and_grad(a, a_torch) check_val_and_grad(b, b_torch) check_val_and_grad(c, c_torch)
def test_mul_broadcast(): a = Tensor.randn(3, 1, 3, requires_grad=True) b = Tensor.randn(3, 1, 1, requires_grad=True) a_torch, b_torch = create_identical_torch_tensor(a, b) c = a * b c_torch = a_torch * b_torch c.backward() c_torch.sum().backward() check_val_and_grad(a, a_torch) check_val_and_grad(b, b_torch) check_val_and_grad(c, c_torch)
def test_matmul(): a = Tensor.randn(3, 4, requires_grad=True) b = Tensor.randn(4, 2, requires_grad=True) a_torch, b_torch = create_identical_torch_tensor(a, b) c = a @ b c_torch = a_torch @ b_torch c.backward() c_torch.sum().backward() check_val_and_grad(a, a_torch) check_val_and_grad(b, b_torch) check_val_and_grad(c, c_torch)
def test_neg(): a = Tensor.randn(30, 40, requires_grad=True).to(Device.GPU) a_torch = create_identical_torch_tensor(a) b = -a b_torch = -a_torch b.backward() b_torch.sum().backward() check_val_and_grad(a, a_torch) check_val_and_grad(b, b_torch)
def test_tanh(): a = Tensor.randn(20, 20, requires_grad=True) a_torch = create_identical_torch_tensor(a) b = a.tanh() b_torch = a_torch.tanh() b.backward() b_torch.sum().backward() check_val_and_grad(a, a_torch) check_val_and_grad(b, b_torch)
def test_multiple(): a = Tensor.randn(2, 3, requires_grad=True) b = Tensor.randn(2, 3, requires_grad=True) a_torch, b_torch = create_identical_torch_tensor(a, b) c = a / b c_torch = a_torch / b_torch d = a - b d_torch = a_torch - b_torch e = c + d e_torch = c_torch + d_torch e.backward() e_torch.sum().backward() check_val_and_grad(a, a_torch) check_val_and_grad(b, b_torch) check_val_and_grad(c, c_torch) check_val_and_grad(d, d_torch) check_val_and_grad(e, e_torch)