Как сохранить и загрузить простые модели регрессии GPy? - PullRequest
0 голосов
/ 03 марта 2020

Я тренирую 250 моделей GPy GPRegression на 7000 примерах. Я хочу использовать эти модели для прогнозирования результатов на невиданных примерах. Как сохранить «настройки моделей» после их обучения? Как вызвать модели и «напомнить» им о значениях параметров, которые они определили в конце процесса обучения? [Пожалуйста, игнорируйте отступы для всего этого поста, все должно быть так, как ожидалось]

Я делаю это:

import numpy as np
import GPy
    for i in range(250):
              GPy_models.append(GPy.models.GPRegression(X_init_np, np.reshape(Y_init_np[:,i], (nooflinestotrainon,1)), kernel))
              GPy_models[i].optimize_restarts(num_restarts=2, messages=False)

    for i in range(250):
            filename = 'GPysModel{}_trained_params.npy'.format(i)
            np.save(filename, GPy_models[i].param_array)

            filename = 'GPysModel{}_trained_yvalues.npy'.format(i)
            np.save(filename, np.reshape(Y_init_np[:,i], (nooflinestotrainon,1)))

            filename = 'GPysModel{}_trained_Xvalues.npy'.format(i)
            np.save(filename, X_init_np)

Чтобы вызвать их, в другой сессии, в другом script.py , Я делаю это:

    Y_pred_GP = np.zeros((1,250), dtype=np.float32)
    Sigma_pred_GP = np.zeros((1,250))
    loaded_models = []
    for i in range(250):
                        y_load = np.load('GPysModel{}_trained_yvalues.npy'.format(i))
                        X_load = np.load('GPysModel{}_trained_Xvalues.npy'.format(i))
                        loaded_models.append(GPy.models.GPRegression(X_load, y_load ,initialize=False))
                        loaded_models[i].update_model(False)
                        loaded_models[i].initialize_parameter()
                        loaded_models[i][:]=np.load('GPysModel{}_trained_params.npy'.format(i))
                        loaded_models[i].update_model(True)
                        loaded_models[i].initialize_parameter()
for i in range(250):
                    Y_pred_GP[:,i], Sigma_pred_GP[:,i] = loaded_models[i].predict(X)

Однако все прогнозы равны 0 для любого X, и я получаю предупреждение:

/home/pemb5107/.local/lib/python3.6/site-packages/paramz/parameterized.py:61: RuntimeWarning:Don't forget to initialize by self.initialize_parameter()!

Что я делаю не так?

Если я попытаюсь предсказать на том же X, который дал результат 0 выше, но сразу после обучения моделей (в том же сеансе), прогноз будет таким, каким он должен быть. Таким образом, проблема в том, как я вызываю модели, а не в том, как я их тренирую.

Спасибо!

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