在GPflow 2.0中设置超参数优化范围

时间:2019-11-17 17:56:24

标签: python tensorflow tensorflow2.0 tensorflow-probability gpflow

在GPflow 1.0中,如果我想对像lengthscale这样的参数设置硬边界(即,限制参数的优化范围),

transforms.Logistic(a=4., b=6.)

将参数限制在4到6之间。

GPflow 2.0的文档说,转换由TensorFlow Probability的Bijector类处理。哪个Bijector类可以处理对参数设置的硬限制,以及实现它的正确方法是什么?

此处(Kernel's hyper-parameters; initialization and setting bounds)提出了有关GPflow 1.0的类似问题。但是由于GPflow 1.0不涉及使用Bijector,所以我提出了一个新问题。

1 个答案:

答案 0 :(得分:1)

这很容易实现双射链:

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 Bijector直接传递给Parameter构造函数。

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>