8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 gpflow 参数旁边训练 tensorflow 变量

kluszon 2月前

18 0

我想使用 GPFlow 实现扭曲的 GP,遵循这篇有趣的论文。在我的设置中,我定义了非常简单的示例 dataX = tf.convert_to_tensor(np.linspace(0,2*pi,10)[:,np.newaxis],dtype=\'

我想使用 GPFlow 实现扭曲的 GP,请遵循这篇有趣的 paper .

在我的设置中我定义了非常简单的示例数据

X = tf.convert_to_tensor(np.linspace(0,2*pi,10)[:,np.newaxis],dtype="float64")
Y = tf.sin(X)
warper = WarpingFunction()
Z = warper.warp(Y)

GP 模型

import gpflow as gp
kern = gp.kernels.SquaredExponential()
model = gp.models.GPR((X,Z),kernel = kern)

以及一个扭曲类

class WarpingFunction(tf.Module):

    def __init__(self,**kwargs):
        super(WarpingFunction, self).__init__(**kwargs)
        self.a = tf.Variable(initial_value=1.0)
        self.b = tf.Variable(initial_value=3.0)

    def warp(self,x):
        z = self.a*tf.math.pow(x,self.b)
        return z

    def inverse(self, z):
        x = tf.math.sign(z) * tf.math.pow(tf.abs(z), 1.0 / self.b) / self.a
        return x

    def grad_warp(self,y):
        dy = self.a * self.b * y**(self.b-1)
        return dy

    def loss(self, y):
        log_vec = tf.math.log(self.grad_warp(y))
        loss_sum = tf.reduce_sum(log_vec)
        return loss_sum

进行变形(在本例中为立方体)。

当我思考如何使用 gpflow 优化器训练 a,b 我定义的 WarpingFunction 。我目前的想法是为优化器提供额外的参数 a,b 并编写自定义损失函数

def loss() -> tf.Tensor:
    Z_predicted,_ = model.predict_y(X)
    squared_error = (Z_predicted - Z) ** 2
    return tf.reduce_mean(squared_error)  +warper.loss(Z_predicted)

opti = gp.optimizers.Scipy()
opti.minimize(loss,model.trainable_variables + warper.trainable_variables())

我在文档或 SO 中没有找到任何内容。我在文档中看到 gpflow 有一个 Parameter 类,但是 trainable_variables 的参数 opti.minimize 只允许 tf.Variable 类型。

我不太熟悉如何 tensorflow 编写自己的训练循环,尤其是与 GP 问题结合的训练循环。

欢迎提供任何提示和建议!

帖子版权声明 1、本帖标题:如何在 gpflow 参数旁边训练 tensorflow 变量
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由kluszon在本站《tensorflow》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: