Я успешно следую методологии сохранения / восстановления моделей GPflow.Но теперь я столкнулся с ошибкой.
Когда я пытаюсь восстановить модель с помощью функции Линейное среднее, восстановление вылетает с ошибкой.
Я думаю, что проблема возникает всоглашение об именовании объекта линейного среднего значения тензорного потока.Вышеуказанное «-44dbadbb-0» является случайным и изменяется каждый раз, когда модель перестраивается, поэтому, если я проверяю имена тензоров при сохранении модели с помощью
from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_file
print_tensors_in_checkpoint_file(file_name='./model.ckpt', tensor_name='', all_tensors=False)
, я получаю возврат:
Linear-eeb5f9f3-0 / A / без ограничений (DT_DOUBLE) [1,1] Linear-eeb5f9f3-0 / b / без ограничений (DT_DOUBLE) [1] модель / X / держатель данных (DT_DOUBLE) [15,1]модель / Y / держатель данных (DT_DOUBLE) [15,1] модель / ядро / ядра / 0 / длина шкалы / без ограничений (DT_DOUBLE) [] модель / ядро / ядра / 0 / дисперсия / без ограничений (DT_DOUBLE) [] модель / ядро / ядра/ 1 / длина шкалы / без ограничений (DT_DOUBLE) [] модель / ядро / ядра / 1 / дисперсия / без ограничений (DT_DOUBLE) [] модель / вероятность / дисперсия / без ограничений (DT_DOUBLE) []
ГдеЛинейная функция явно имеет имя, отличное от модели, которую пытаются восстановить.
Я попытался исправить это, переименовав переменные перед восстановлением, но это не работает с тензорным потоком.Я также пробовал разные способы сохранения / восстановления, но у меня возникли проблемы с возможностью выборки из модели.
Сохранение модели
import gpflow
import numpy as np
import random
import tensorflow as tf
# define data
rng = np.random.RandomState(4)
X = rng.uniform(0, 5.0, 15)[:, np.newaxis]
Y = np.sin((X[:, 0] - 2.5) ** 2).reshape(len(X),1)
# define the mean function
mf = gpflow.mean_functions.Linear(np.ones((1,1)),np.zeros((1,)))
# create the GP model
with gpflow.defer_build():
k = gpflow.kernels.Matern32(1)+gpflow.kernels.RBF(1)
m = gpflow.models.GPR(X, Y, kern=k,name='model',mean_function=mf)
m.likelihood.variance = 1e-03
m.likelihood.trainable = False
tf.global_variables_initializer()
tf_session = m.enquire_session()
m.compile( tf_session )
gpflow.train.ScipyOptimizer().minimize(m)
saver = tf.train.Saver()
save_path = saver.save(tf_session, "./model.ckpt")
print("Model saved in path: %s" % save_path)
Восстановление модели
import gpflow
import numpy as np
import random
import tensorflow as tf
# define data
rng = np.random.RandomState(4)
X = rng.uniform(0, 5.0, 15)[:, np.newaxis]
Y = np.sin((X[:, 0] - 2.5) ** 2).reshape(len(X),1)
# define the mean function
mf = gpflow.mean_functions.Linear(np.ones((1,1)),np.zeros((1,)))
with gpflow.defer_build():
k = gpflow.kernels.Matern32(1)+gpflow.kernels.RBF(1)
m = gpflow.models.GPR(X, Y, kern=k,name='model',mean_function=mf)
m.likelihood.variance = 1e-03
m.likelihood.trainable = False
# construct and compile the tensorflow session
tf.global_variables_initializer()
tf_session = m.enquire_session()
m.compile( tf_session )
saver = tf.train.Saver()
save_path = saver.restore(tf_session, "./model.ckpt")
print("Model loaded from path: %s" % save_path)
m.anchor(tf_session)
Код падает на save_path = saver.restore(tf_session, "./model.ckpt")
с ошибкой:
NotFoundError (см. Выше для отслеживания): ключ Linear-44dbadbb-0 / A / без ограничений не найден в контрольной точке ...