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

标签 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没有涉及到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>

关于python - 在 GPflow 2.0 中设置超参数优化范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903446/

相关文章:

python - 如何在 Django 中创建仅包含用户名的用户模型?

python - 验证损失仅在第一个时期为零

python - Tensorflow 删除 JFIF

python - 输出到终端的 Tensorflow 用等号填充

python - 有效地向模型中的所有可训练权重添加噪声

python - 在 Python 2.7 中使用英特尔 RDRAND

python - 为 Python 中的每个对象设置唯一 ID

python - 想要连接随机均匀生成的值

python - “zsh: illegal hardware instruction python” 在 macbook pro M1 上使用 Tensorflow

tensorflow - GPU 上的数据增强