在 GPflow 1.0 中,如果我想对像 lengthscale 这样的参数设置硬界限(即限制参数的优化范围),
transforms.Logistic(a=4., b=6.)
会将参数限制在 4 和 6 之间。
GPflow 2.0 的文档称转换由 TensorFlow Probability 的 Bijector 类处理。哪个 Bijector 类处理对参数设置硬限制,以及实现它的正确方法是什么?
这里提出了类似的问题(内核的超参数;初始化和设置边界)关于 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)