code: def test_multitask_gp_mean_abs_error(self):
      likelihood = MultitaskGaussianLikelihood(num_tasks=2)
      model = MultitaskGPModel(train_x, train_y, likelihood)
      # Find optimal model hyperparameters
      model.train()
      likelihood.train()
  
      # Use the adam optimizer
      optimizer = torch.optim.Adam(
          model.parameters(), lr=0.1
      )  # Includes GaussianLikelihood parameters
  
      # "Loss" for GPs - the marginal log likelihood
      mll = gpytorch.mlls.ExactMarginalLogLikelihood(likelihood, model)
  
      n_iter = 50
      for _ in range(n_iter):
          # Zero prev backpropped gradients
          optimizer.zero_grad()
          # Make predictions from training data
          # Again, note feeding duplicated x_data and indices indicating which task
          output = model(train_x)
          # TODO: Fix this view call!!
          loss = -mll(output, train_y)
          loss.backward()
          optimizer.step()
  
      # Test the model
      model.eval()
      likelihood.eval()
      test_x = torch.linspace(0, 1, 51)
      test_y1 = torch.sin(test_x * (2 * pi))
      test_y2 = torch.cos(test_x * (2 * pi))
      test_preds = likelihood(model(test_x)).mean
      mean_abs_error_task_1 = torch.mean(
          torch.abs(test_y1 - test_preds[:, 0])
      )
      mean_abs_error_task_2 = torch.mean(
          torch.abs(test_y2 - test_preds[:, 1])
      )
  
      self.assertLess(mean_abs_error_task_1.squeeze().item(), 0.05)
      self.assertLess(mean_abs_error_task_2.squeeze().item(), 0.05)
  
file_path: gpytorch/test/examples/test_kronecker_multitask_sgpr_regression.py
imports: import unittest
  from math import pi
  import torch
  import gpytorch
  from gpytorch.distributions import MultitaskMultivariateNormal
  from gpytorch.likelihoods import MultitaskGaussianLikelihood
  from gpytorch.means import ConstantMean, MultitaskMean
  from gpytorch.test.base_test_case import BaseTestCase
label_desc: Use image node_id 1 for calling the TestSimpleGPRegression obj's underlying member method code with example usage: obj.test_multitask_gp_mean_abs_error() without return types