Георадар и ядро ​​с пиро-аи

Я использую pyro.contrib.gp для обучения своих данных, но столкнулся со странной проблемой. Допустим, мы определяем 2 модели георадара следующим образом:

      kernel_init = gp.kernels.RBF(input_dim= dimension, variance=torch.tensor(1.),
lengthscale=length_scale_init)
gpr_init = gp.models.GPRegression(train_x, train_y, kernel_init, noise=torch.tensor(0.), jitter = jitter)

kernel = gp.kernels.RBF(input_dim= dimension, variance=torch.tensor(1.),
lengthscale=length_scale_init)
gpr_opt = gp.models.GPRegression(train_x, train_y, kernel, noise=torch.tensor(0.), jitter = jitter)

Затем после оптимизации параметров масштаба длины ядра с помощью

      optimizer = torch.optim.Adam([{‘params’: gpr_opt.kernel.lengthscale_unconstrained}], lr=5e-4)
for i in range(num_steps):
   # Zero gradients from previous iteration
   optimizer.zero_grad()
   # Calc loss and backprop gradients
   loss = loss_function(params)
   loss.backward()
   # Update step
   optimizer.step()
   losses.append(loss.item())

Наконец, вы хотите вычислить значения двух моделей в некоторых точках test_x:

      with torch.no_grad():
   init_value = gpr_init(test_x, full_cov=False, noiseless=True)
   opt_value = gpr_opt(test_x, full_cov=False, noiseless=True)

И, как ни странно, получается такое же значение, равное opt_value = init_valueно каждая модель gpr имеет ядро ​​с разными масштабами длины. Почему? Кажется, работает, если я удалю init_value=... на последнем этапе после с torch.no_grad():.

0 ответов

Другие вопросы по тегам