High-dimensional GPs with pyro

Hi, I am trying to optimize a high-dimensional Gaussian surrogate model with pyro, I think there are two main methods:

  1. In the tutorial tell how to use the GP interface in Pyro
  2. Use the surrogate model trained in machine learning (sklearn.gaussian_process) , then use SVI to reduce the gap between the output of the surrogate model and the experimental results to get the optimal value of the input parameters

(There are three input parameters and four hundred output values, and in the surrogate model, the training data is 1303 input, 130400 out put. After the surrogate model training is completed, 400 real experimental values need to be compared)

When I tried my first method, I found that it seems impossible to achieve high dimensionality, below is my code:

X = torch.tensor(X, dtype=torch.float)    #which is 130*3
Y = torch.tensor(Y, dtype=torch.float)    #which is 130*400
kernel = gp.kernels.RBF(input_dim=3, variance=torch.tensor(1.), lengthscale=torch.tensor(10.))
gpr = gp.models.GPRegression(X, Y, kernel)

ValueError: Expected the number of input data points equal to the number of output data points, but got 130 and 400.

I haven’t solved my problem yet, so ask for help, thanks in advance.

According to the docs of GPR:

An output data for training. Its last dimension is the number of data points.

I think you just need to swap the dimension of Y:

gpr = gp.models.GPRegression(X, Y.t(), kernel)