Гиперпараметры ядра;инициализация и установка границ - PullRequest
0 голосов
/ 01 апреля 2019

Я думаю, что многим людям, подобным мне, может быть интересно, как они могут использовать GPFlow для своих особых задач.Ключевым моментом является то, как настраивается GPFlow, и хороший пример был бы очень полезен.

В моем случае я прочитал и перепробовал множество комментариев по поднятым вопросам без какого-либо реального успеха.Задать параметры модели ядра непросто (создать со значениями по умолчанию, а затем сделать это с помощью метода удаления объекта).Метод преобразования нечеткий.

Было бы очень полезно добавить пример, показывающий.как можно инициализировать и установить границы анизотропной модели ядра (значения масштабов длины и границы, дисперсии, ...) и специально добавить ошибку наблюдений (как альфа-параметр в виде массива)

Ответы [ 3 ]

3 голосов
/ 02 апреля 2019

Если вы просто хотите установить значение, вы можете сделать

model = gpflow.models.GPR(np.zeros((1, 1)),
                          np.zeros((1, 1)),
                          gpflow.kernels.RBF(1, lengthscales=0.2))

В качестве альтернативы

model = gpflow.models.GPR(np.zeros((1, 1)),
                          np.zeros((1, 1)),
                          gpflow.kernels.RBF(1))
model.kern.lengthscales = 0.2

Если вы хотите изменить преобразование, вам нужно либо создать подкласс ядраили вы также можете сделать

with gpflow.defer_build():
     model = gpflow.models.GPR(np.zeros((1, 1)),
                               np.zeros((1, 1)),
                               gpflow.kernels.RBF(1))
     transform = gpflow.transforms.Logistic(0.1, 1.))
     model.kern.lengthscales = gpflow.params.Parameter(0.3, transform=transform)
model.compile()

. Вам нужно defer_build, чтобы остановить компиляцию графика перед тем, как вы изменили преобразование.При использовании подхода, описанного выше, компиляция графа тензорного потока задерживается (до явного model.compile()), поэтому создается с предполагаемым ограничивающим преобразованием.

Использование параметра массива для дисперсии правдоподобия выходит за рамки gpflow.Для чего это стоит (и потому что об этом спрашивали раньше), эта конкретная модель особенно проблематична, так как неясно, как определяются контрольные точки.

1 голос
/ 01 апреля 2019

Подробнее о том, как получить доступ и изменить параметры GPflow: просмотр, получение и настройка параметров документации .

Дополнительный бит для ответа @ user1018464 о замене преобразования в существующем параметре: изменить преобразование немного сложно, вы не можете изменить преобразование после компиляции модели в TensorFlow.

1007 * Е.Г. *

likelihood = gpflow.likelihoods.Gaussian()
likelihood.variance.transform = gpflow.transforms.Logistic(1., 10.)
----
GPflowError: Parameter "Gaussian/variance" has already been compiled.

Вместо этого вам нужно сбросить объект GPflow:

likelihood = gpflow.likelihoods.Gaussian()  # All tensors compiled

likelihood.clear()
likelihood.variance.transform = gpflow.transforms.Logistic(2, 5)
likelihood.variance = 2.5
likelihood.compile()
1 голос
/ 01 апреля 2019

Настройка параметров ядра может быть выполнена с помощью функции .assign() или с помощью прямого назначения.См. Записную книжку https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/understanding/tf_graphs_and_sessions.ipynb. Вам не нужно удалять параметр, чтобы присвоить ему новое значение.

Если вы хотите иметь шум для каждой точки данных, вам нужно будет реализовать собственную настраиваемую вероятностьЭто можно сделать, взяв в качестве примера Gaussian правдоподобие в likelihoods.py.

Если под «границами» подразумевается ограничение диапазона оптимизации для параметра, можно использовать преобразование Logistic.Если вы хотите передать пользовательское преобразование для параметра, вы можете передать построенный объект Parameter в конструкторы с пользовательским преобразованием.В качестве альтернативы вы можете назначить вновь созданный Parameter с новым преобразованием для модели.

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