用PyTorch进行科学计算

用PyTorch进行科学计算,pytorch,Pytorch,我想使用Pytork作为一个科学计算包。在这方面它有很多值得推荐的地方——它的张量基本上是GPU加速的numpy阵列,它的autograd机制对于神经网络之外的许多事情都有潜在的用处 然而,可用的教程和文档似乎非常适合于快速让人们使用它进行机器学习。虽然有很多关于Tensor和Variable类的有用信息(我对这些材料相当了解),但是nn和optim包似乎总是通过示例而不是通过解释API来介绍,这使得我们很难弄清楚到底发生了什么 我在这一点上的主要问题是,我是否可以使用optim包而不使用nn包

我想使用Pytork作为一个科学计算包。在这方面它有很多值得推荐的地方——它的张量基本上是GPU加速的numpy阵列,它的
autograd
机制对于神经网络之外的许多事情都有潜在的用处

然而,可用的教程和文档似乎非常适合于快速让人们使用它进行机器学习。虽然有很多关于
Tensor
Variable
类的有用信息(我对这些材料相当了解),但是
nn
optim
包似乎总是通过示例而不是通过解释API来介绍,这使得我们很难弄清楚到底发生了什么

我在这一点上的主要问题是,我是否可以使用
optim
包而不使用
nn
包,如果可以,如何操作。当然,我始终可以将我的模拟作为
nn.Module
的子类来实现,即使它们不是神经网络,但我想了解当我这样做时在引擎盖下会发生什么,以及它会给我的特定应用带来什么好处/缺点


更广泛地说,我希望有人能提供更多API逻辑概述的参考资料(特别是
nn
optim
),而不是仅仅给出示例。

这是关于在不使用
nn
的情况下使用
optim
的具体问题的部分自我回答。答案是,是的,你可以做到。事实上,从源代码来看,
optim
包对
nn
一无所知,只关心变量和张量

文件给出了以下不完整的示例:

optimizer = optim.Adam([var1, var2], lr = 0.0001)
后来:

for input, target in dataset:
    optimizer.zero_grad()
    output = model(input)
    loss = loss_fn(output, target)
    loss.backward()
    optimizer.step()
函数
model
没有在任何地方定义,看起来它可能与
nn
有关,但实际上它可以是一个Python函数,使用
var1
var2
作为参数,从
input
计算
输出,只要所有的中间步骤都是使用变量来完成的,这样就可以进行区分。调用
optimizer.step()
将自动更新
var1
var2
的值


就PyTorch的整体结构而言,
optim
nn
似乎是相互独立的,而
nn
基本上只是将可微函数链接在一起的一种方便方式,以及在机器学习中有用的函数库。尽管如此,我仍然希望能从技术角度对整个方案进行全面介绍。

了解投票失败的原因会有所帮助,这样我就可以避免将来犯同样的错误。(如果问题是我想将一个库用于其预期用途以外的其他用途,请注意,其中一位PyTorch开发人员在YouTube上做了一个名为“PyTorch:Framework for fast,dynamic deep learning and scientific computing”的演示,所以这并不疯狂。)