Keras 中的自定义损失函数与物理通知

Custom loss function in keras with physic informed

提问人:eldanks 提问时间:11/17/2023 更新时间:11/17/2023 访问量:13

问:

在我看来,我正在尝试实现一些有点复杂的东西。我在上下文中介绍你。我有一个自动编码器来检测故障,其中输入和输出之间的均方误差。这是没有问题的。现在我正在尝试实现 physic informed,其中我尝试使用诸如

enter image description here

f(x) 是我的 NN 的均方误差。A 和 b 是具有要添加的约束的矩阵。假设在我的示例中,我没有 b(常量) 我实现的自定义损失函数是:

def custom_loss_pass2(model, x_tensor, scaler):


def custom_loss(y_true,y_pred):
    with tf.GradientTape() as t:
        t.watch(x_tensor)
        
        f = K.mean(K.square(model(x_tensor) - x_tensor))

    grad = t.gradient(f, x_tensor)
    
    loss_PDE = K.mean(K.square(model(x_tensor) - x_tensor)) - tf.transpose(((np.matmul(np.linalg.inv(np.matmul(A_soc,A_soc.T)), A_soc)) @ tf.transpose(grad) )) @ (A_soc @ tf.transpose(x_tensor)) + 1/0.1 * tf.norm(A_soc @ tf.transpose(x_tensor))

    return loss_PDE
return custom_loss

这是训练,但与均方误差相比,损失如此之高。所以我要添加的术语太高了。我正在扩展数据集。所以我不能只乘以一个没有缩放的矩阵 A。我试着直接缩放矩阵 A

A_soc = scaler.transform(np.array([["array here with the constraints"]]))

我还尝试将这个矩阵添加到量表的输入中以考虑它。 我尝试实现对数据的scale_inverse,以仅计算损失函数。问题在于不可能在一个张量中实现逆向。

有人知道为什么这不起作用吗?你是否能够看到另一个失败或我没有考虑的东西?

非常感谢

Python Keras 损失函数 自动编码器

评论


答: 暂无答案