Onw*_*rds 5 python numpy pde pytorch autograd
(注意:这不是关于反向传播的问题。)我正在尝试在GPU上使用PyTorch张量代替Numpy数组求解非线性PDE。我想计算任意张量的偏导数,类似于中心有限差分numpy.gradient函数的作用。我有其他解决此问题的方法,但是由于我已经在使用PyTorch,所以我想知道是否有可能使用autograd模块(或者通常是任何其他自动分化模块)来执行此操作。
我创建了numpy.gradient函数的张量兼容版本-运行速度快得多。但是,也许有更优雅的方法可以做到这一点。我找不到其他任何资料可以解决这个问题,无论是表明这是可能的还是不可能的。也许这反映了我对自动分化算法的无知。
numpy.gradients我自己也有同样的问题:在数值求解偏微分方程时,我们始终需要访问空间梯度(函数可以给我们) - 是否可以使用自动微分来计算梯度,而不是使用有限-区别还是有什么味道呢?
“我想知道是否可以使用 autograd 模块(或者一般来说,任何其他自动微分模块)来执行此操作。”
答案是否定的:一旦你在空间或时间上离散化你的问题,那么时间和空间就变成了具有网格状结构的离散变量,而不是你输入到某个函数中来计算偏微分方程解的显式变量。
例如,如果我想计算某些流体流 u(x,t) 的速度场,我将在空间和时间上进行离散化,并且我将得到u[:,:]索引代表空间和时间位置的位置。
自动微分可以计算函数 u(x,t) 的导数。那么为什么它不能在这里计算空间或时间导数呢?因为你已经离散化了你的问题。这意味着您没有针对任意 x 的 u 函数,而是在某些网格点上有 u 的函数。您无法自动区分网格点的间距。
据我所知,您编写的张量兼容函数可能是您最好的选择。您可以看到 PyTorch 论坛中提出了类似的问题(此处和此处)。或者你可以做类似的事情
dx = x[:,:,1:]-x[:,:,:-1]
如果您不担心端点。
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |