在gpflow2.0中设置超参数优化边界

2024-04-29 13:56:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

将参数绑定在4和6之间。你知道吗

gpflow2.0的文档说,转换是由TensorFlow Probability的Bijector类处理的。哪个Bijector类负责设置参数的硬限制,正确的实现方法是什么?你知道吗

关于gpflow1.0,这里提出了一个类似的问题(Kernel's hyper-parameters; initialization and setting bounds)。但是由于gpflow1.0不涉及双喷射器的使用,我提出了一个新问题。你知道吗


Tags: 方法文档参数tensorflowkernelhyper边界probability
1条回答
网友
1楼 · 发布于 2024-04-29 13:56:29

使用双喷射器链很容易做到这一点:

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>

现在,您可以直接将logisticbijector传递给参数构造函数。你知道吗

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>

相关问题 更多 >