Я тренирую 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 выше, но сразу после обучения моделей (в том же сеансе), прогноз будет таким, каким он должен быть. Таким образом, проблема в том, как я вызываю модели, а не в том, как я их тренирую.
Спасибо!