Проблема ядра точки изменения GPflow с несколькими измерениями - PullRequest
0 голосов
/ 06 января 2020

Я следую учебному пособию здесь для реализации ядра точки изменения в gpflow. Тем не менее, у меня есть 3 входа и 1 выход, и я хотел бы, чтобы ядро ​​точки изменения было только в первом входном измерении, а другие стандартные ядра - в двух других входных измерениях. Я получаю следующую ошибку:

InvalidArgumentError: Несовместимые фигуры: [2000,3,1] против [3,2000,1] [Op: Mul] имя: mul /

Ниже приведен минимальный рабочий пример. Может кто-нибудь, пожалуйста, дайте мне знать, где я иду не так?

gpflow версия 2.0.0.rc1

import pandas as pd
import gpflow
from gpflow.utilities import print_summary


df_all = pd.read_csv(
    'https://raw.githubusercontent.com/ipan11/gp/master/dataset.csv')

# Training dataset in numpy format
X = df_all[['X1', 'X2', 'X3']].to_numpy()
Y1 = df_all['Y'].to_numpy().reshape(-1, 1)


# Changepoint kernel only on first dimension and standard kernels for the other two dimensions
base_k1 = gpflow.kernels.Matern32(lengthscale=0.2, active_dims=[0])
base_k2 = gpflow.kernels.Matern32(lengthscale=2., active_dims=[0])
k1 = gpflow.kernels.ChangePoints(
    [base_k1, base_k2], [.4], steepness=5)

k2 = gpflow.kernels.Matern52(lengthscale=[1., 1.], active_dims=[1, 2])
k_all = k1+k2
print_summary(k_all)

m1 = gpflow.models.GPR(data=(X, Y1), kernel=k_all, mean_function=None)
print_summary(m1)
opt = gpflow.optimizers.Scipy()


def objective_closure():
    return -m1.log_marginal_likelihood()


opt_logs = opt.minimize(objective_closure, m1.trainable_variables,
                        options=dict(maxiter=100))

1 Ответ

0 голосов
/ 07 января 2020

Правильный ответ - переместить active_dims=[0] из ядер base_k * в ядро ​​ChangePoints (),

k1 = gpflow.kernels.ChangePoints([base_k1, base_k2], [0.4], steepness=5, active_dims=[0])

, но в настоящее время это не поддерживается в GPflow 2, что является ошибкой. Я открыл проблему на github и обновлю этот ответ, как только он будет исправлен (если у вас есть go для исправления этой ошибки, не стесняйтесь открывать запрос извлечения, всегда рад помочь !).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...