如何为回归问题找到合适的损失函数?

问题描述

我正在尝试使用神经网络求解非线性微分方程。很多人正在这样做,他们已经取得了不错的成绩。我定义了一个自定义损失函数,以满足一组物理约束。但是,我不确定此损失函数是否合适。对于这些条件之一,期望值是10到5的幂,而另一个是10到-10的幂。大多数人都使用均方误差作为损失函数并获得了良好的结果,但是在我的案例中应用相同的方法似乎忽略了约束n的损失。有什么办法可以解决这类问题?在定义损失函数的方向上解决问题是否正确?

def loss(self,u,u_pred):
    f_pred = self.f_model()
    n_pred = self.n_model()
    return tf.reduce_mean(tf.square((u - u_pred))) + \
        tf.reduce_mean(tf.square(f_pred)) + tf.reduce_mean(tf.square(n_pred))

def f_model(self):
    with tf.GradientTape(persistent=True) as tape:
        # Watching the two inputs we’ll need later,x and t
        tape.watch(self.x_f) 
        tape.watch(self.t_f)
        X_f = tf.stack([self.x_f[:,0],self.t_f[:,0]],axis=1)

        # Getting the prediction
        logvo=self.model(X_f)
        vo = 10.0**logvo
        vo_x = tape.gradient(vo,self.x_f)
        Jvo=svo(logvo)/stot(logvo)*DC['J']-2*DC['e0']*DC['DVo']*vo_x
    Jvo_x=tape.gradient(Jvo,self.x_f)
    vo_t = tape.gradient(vo,self.t_f)

    del tape
    return (vo_t+Jvo_x/2/DC['e0']) #the constraint is vo_t == -Jvo_x/2/DC['e0']

def n_model(self):
    with tf.GradientTape(persistent = True) as tape:
        tape.watch(self.x_N)
        tape.watch(self.t_N)
        
        X_N=tf.stack([self.x_N[:,self.t_N[:,axis=1)
        
        logvo = self.model(X_N)
        vo = 10.0**logvo
        vo_x = tape.gradient(vo,self.x_N)
        Jvo=svo(logvo)/stot(logvo)*DC['J']-2*DC['e0']*DC['DVo']*vo_x
    del tape
    return Jvo #the constraint is Jvo == 0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)