def test_log_det_only(self): # Forward pass with gpytorch.settings.num_trace_samples(1000): res = NonLazyTensor(self.mat).log_det() actual = self.mat_clone.logdet() self.assertAlmostEqual(res.item(), actual.item(), places=1) # Backward actual.backward() res.backward() self.assertLess( torch.max((self.mat_clone.grad - self.mat.grad).abs()).item(), 1e-1)
def test_log_det_only(self): # Forward pass with gpytorch.settings.num_trace_samples(1000): res = NonLazyTensor(self.mat_var).log_det() actual = self.mat_var_clone.det().log() self.assertAlmostEqual(res.item(), actual.item(), places=1) # Backward actual.backward() res.backward() self.assertTrue( approx_equal(self.mat_var_clone.grad, self.mat_var.grad, epsilon=1e-1))
def test_inv_quad_only_vector(self): # Forward pass res = NonLazyTensor(self.mat_var).inv_quad(self.vec_var) actual = self.mat_var_clone.inverse().matmul(self.vec_var_clone).mul( self.vec_var_clone).sum() self.assertAlmostEqual(res.item(), actual.item(), places=1) # Backward actual.backward() res.backward() self.assertTrue( approx_equal(self.mat_var_clone.grad, self.mat_var.grad, epsilon=1e-1)) self.assertTrue( approx_equal(self.vec_var_clone.grad, self.vec_var.grad))
def test_inv_quad_only_vector(self): # Forward pass res = NonLazyTensor(self.mat).inv_quad(self.vec) actual = self.mat_clone.inverse().matmul(self.vec_clone).mul( self.vec_clone).sum() self.assertAlmostEqual(res.item(), actual.item(), places=1) # Backward actual.backward() res.backward() self.assertLess( torch.max((self.mat_clone.grad - self.mat.grad).abs()).item(), 1e-3) self.assertLess( torch.max((self.vec_clone.grad - self.vec.grad).abs()).item(), 1e-3)