gpt4 book ai didi

python - 使用自动微分库计算任意张量的偏导数

转载 作者:太空狗 更新时间:2023-10-30 01:35:36 30 4
gpt4 key购买 nike

(注意:这不是关于反向传播的问题。)我正在尝试在 GPU 上使用 PyTorch 张量代替 Numpy 数组来解决非线性 PDE。我想计算任意张量的偏导数,类似于中心有限差分的作用 numpy.gradient功能。我有其他方法解决这个问题,但由于我已经在使用 PyTorch,我想知道是否可以使用 autograd 模块(或者,通常,任何其他自动微分模块)来执行此操作。

我已经创建了一个张量兼容版本的 numpy.gradient 函数 - 它运行得更快。但也许有一种更优雅的方式来做到这一点。我找不到任何其他来源来解决这个问题,要么表明它是可能的,要么是不可能的;也许这反射(reflect)了我对自微分算法的无知。

最佳答案

我自己也有同样的问题:在数值求解 PDE 时,我们需要始终访问空间梯度(numpy.gradients 函数可以为我们提供)——是否有可能使用自动微分来计算梯度,而不是使用有限差分或它的某种风格?

“我想知道是否可以使用 autograd 模块(或者,一般来说,任何其他自动微分模块)来执行此操作。”

答案是否定的:一旦您将问题在空间或时间上离散化,时间和空间就会变成具有网格状结构的离散变量,而不是您输入的显式变量一些函数来计算 PDE 的解。

例如,如果我想计算一些流体流 u(x,t) 的速度场,我会在空间和时间上离散化,并且我会得到 u[:,:]其中索引代表空间和时间的位置。

自动微分可以计算函数 u(x,t) 的导数。那么为什么它不能在这里计算空间或时间导数呢?因为你已经离散化了你的问题。这意味着您没有针对任意 x 的 u 函数,而是在某些网格点处有 u 的函数。您无法根据网格点的间距自动区分。

据我所知,您编写的张量兼容函数可能是您的最佳选择。你可以看到在 PyTorch 论坛中已经提出了类似的问题 herehere .或者你可以做类似的事情

dx = x[:,:,1:]-x[:,:,:-1]

如果您不担心端点。

关于python - 使用自动微分库计算任意张量的偏导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57261254/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com