在 GPflow 2.0 中设置超参数优化范围
Setting hyperparameter optimization bounds in GPflow 2.0
在 GPflow 1.0 中,如果我想在像 lengthscale 这样的参数上设置硬边界(即限制参数的优化范围),
transforms.Logistic(a=4., b=6.)
将参数限制在 4 和 6 之间。
GPflow 2.0 的文档说转换由 TensorFlow Probability 的 Bijector classes 处理。哪个 Bijector class 处理对参数的硬限制设置,以及实现它的正确方法是什么?
此处 (Kernel's hyper-parameters; initialization and setting bounds) 提出了一个关于 GPflow 1.0 的类似问题。但是由于GPflow 1.0没有涉及到Bijectors的使用,所以我新开了一个问题。
使用双射器链很容易做到这一点:
In [35]: a = 3.0
...: b = 5.0
...: affine = tfp.bijectors.AffineScalar(shift=a, scale=(b - a))
...: sigmoid = tfp.bijectors.Sigmoid()
...: logistic = tfp.bijectors.Chain([affine, sigmoid])
In [36]: logistic.forward(logistic.inverse(3.1) + 0.0)
Out[36]: <tf.Tensor: id=222, shape=(), dtype=float32, numpy=3.1>
现在,您可以将 logistic
双射器直接传递给参数构造函数。
In [45]: p = gpflow.Parameter(3.1, transform=logistic, dtype=tf.float32)
In [46]: p
Out[46]: <tf.Tensor: id=307, shape=(), dtype=float32, numpy=3.1>
In [47]: p.unconstrained_variable
Out[47]: <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=-2.9444401>
在 GPflow 1.0 中,如果我想在像 lengthscale 这样的参数上设置硬边界(即限制参数的优化范围),
transforms.Logistic(a=4., b=6.)
将参数限制在 4 和 6 之间。
GPflow 2.0 的文档说转换由 TensorFlow Probability 的 Bijector classes 处理。哪个 Bijector class 处理对参数的硬限制设置,以及实现它的正确方法是什么?
此处 (Kernel's hyper-parameters; initialization and setting bounds) 提出了一个关于 GPflow 1.0 的类似问题。但是由于GPflow 1.0没有涉及到Bijectors的使用,所以我新开了一个问题。
使用双射器链很容易做到这一点:
In [35]: a = 3.0
...: b = 5.0
...: affine = tfp.bijectors.AffineScalar(shift=a, scale=(b - a))
...: sigmoid = tfp.bijectors.Sigmoid()
...: logistic = tfp.bijectors.Chain([affine, sigmoid])
In [36]: logistic.forward(logistic.inverse(3.1) + 0.0)
Out[36]: <tf.Tensor: id=222, shape=(), dtype=float32, numpy=3.1>
现在,您可以将 logistic
双射器直接传递给参数构造函数。
In [45]: p = gpflow.Parameter(3.1, transform=logistic, dtype=tf.float32)
In [46]: p
Out[46]: <tf.Tensor: id=307, shape=(), dtype=float32, numpy=3.1>
In [47]: p.unconstrained_variable
Out[47]: <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=-2.9444401>