I’m using Gpytorch to implement a multi output regression, but i have an error when i try to use a Periodic kernel.
RuntimeError: NaNs encountered when trying to perform matrix-vector multiplication
It seems to work with the RBF kernel but as soon as i use the Periodic kernel, it doesn’t work anymore.
The definition of the class is the following :
class MultitaskGPModel(gpytorch.models.ExactGP): def __init__(self, train_x, train_y, likelihood): super(MultitaskGPModel, self).__init__(train_x, train_y, likelihood) self.mean_module = gpytorch.means.MultitaskMean( gpytorch.means.ConstantMean(),num_tasks=5) self.covar_module = gpytorch.kernels.MultitaskKernel( gpytorch.kernels.PeriodicKernel(),num_tasks=5, rank=1) def forward(self, x): mean_x = self.mean_module(x) covar_x = self.covar_module(x) return gpytorch.distributions.MultitaskMultivariateNormal(mean_x, covar_x) likelihood = gpytorch.likelihoods.MultitaskGaussianLikelihood(num_tasks=5) model = MultitaskGPModel(x_train, y_train, likelihood)
and my for loop is :
for i in range(n_iter): optimizer.zero_grad() output = model(x_train) loss = -mll(output, y_train) loss.backward() print('Iter %d/%d - Loss: %.3f' % (i + 1, n_iter, loss.item())) optimizer.step()
The error occurs when i call
optimizer.step(), and i think that it is related to the differentiation of the variables and to the require_grat attribute, so i have tried to enable the grad in the data like that :
x_train = torch.tensor(x_train, requires_grad=True).float() y_train = torch.tensor(y_train, requires_grad=True).float() x_test = torch.tensor(x_test, requires_grad=True).float() y_test = torch.tensor(y_test, requires_grad=True).float()
But it hasn’t changed anything…
It would be really nice to have some help ! Thank you so much !
PS : Pytorch version 1.0