Closed xgxg1314 closed 2 years ago
您好,非常感谢您的开源仓库,很值得学习借鉴的工作!我有个疑问,是否可以将您的算法用于PINN的训练,不知道您是否了解PINN。这里有个知乎帖子介绍: PINN代码实现
简单说就是loss的构造跟一般的监督学习不太一样,传统监督学习中loss = Loss(pred - ture),但在PINN中,把微分方程也加入到loss中,于是PINN的loss = Loss(pred - ture) + Loss_pde。而构造Loss_pde过程中,需要使用自动微分求导,用来构造微分方程中的各阶导数项,进而得到Loss_pde。 pytorch实现PINN的算例代码
` def net_f(self, x, t): """ The pytorch autograd version of calculating residual """ u = self.net_u(x, t)
u_t = torch.autograd.grad( u, t, grad_outputs=torch.ones_like(u), retain_graph=True, create_graph=True )[0] u_x = torch.autograd.grad( u, x, grad_outputs=torch.ones_like(u), retain_graph=True, create_graph=True )[0] u_xx = torch.autograd.grad( u_x, x, grad_outputs=torch.ones_like(u_x), retain_graph=True, create_graph=True )[0] f = u_t + u * u_x - self.nu * u_xx return f`
上述代码就是构造Loss_pde。不知道您的算法框架中,能否实现加入这个Loss_pde,进而实现PINN的训练?看您的代码中,应该没有使用自动微分求导。
你好,感谢关注我们的工作。dlADMM通过对神经网络引入层间变量,将原本的loss函数最小化问题拆成了多个子问题进行求解,每个子问题的目标函数只依赖部分变量。Loss_pde里需要用到DNN输出u对于外部输入(x, t)的梯度信息,如果直接应用dlADMM的话u与(x, t)独立,不能求梯度。
您好,非常感谢您的开源仓库,很值得学习借鉴的工作!我有个疑问,是否可以将您的算法用于PINN的训练,不知道您是否了解PINN。这里有个知乎帖子介绍: PINN代码实现
简单说就是loss的构造跟一般的监督学习不太一样,传统监督学习中loss = Loss(pred - ture),但在PINN中,把微分方程也加入到loss中,于是PINN的loss = Loss(pred - ture) + Loss_pde。而构造Loss_pde过程中,需要使用自动微分求导,用来构造微分方程中的各阶导数项,进而得到Loss_pde。 pytorch实现PINN的算例代码
` def net_f(self, x, t): """ The pytorch autograd version of calculating residual """ u = self.net_u(x, t)
上述代码就是构造Loss_pde。不知道您的算法框架中,能否实现加入这个Loss_pde,进而实现PINN的训练?看您的代码中,应该没有使用自动微分求导。