我想使用PyTorch作为科学计算包。它在这方面有很多推荐 - 它的Tensors基本上是GPU加速的numpy数组,它的autograd
机制可能对神经网络之外的很多东西都有用。
但是,可用的教程和文档似乎非常适合快速让人们使用它进行机器学习。虽然Tensor
和Variable
类有很多很好的信息(我理解这个材料相当不错),但nn
和optim
软件包似乎总是通过示例而不是通过解释API来介绍,这使得很难弄清楚到底是怎么回事。
我在这一点上的主要问题是我是否可以使用optim
包而不使用nn
包,如果是这样的话怎么做。当然,我总是可以将我的模拟实现为nn.Module
的子类,即使它们不是神经网络,但我想了解当我这样做时会发生什么,以及它为我的特定应用程序带来的好处/缺点。
更广泛地说,我希望能够提供任何资源的指针,这些资源提供了更多API的逻辑概述(特别是针对nn
和optim
),而不仅仅是提供示例。
这是关于在不使用optim
的情况下使用nn
的具体问题的部分自我回答。答案是,是的,你可以做到这一点。事实上,从查看源代码,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函数,使用output
和input
作为参数从var1
计算var2
,只要所有中间步骤都是使用变量完成,以便可以区分它。对optimizer.step()
的调用将自动更新var1
和var2
的值。
就整体PyTorch的结构而言,似乎optim
和nn
彼此独立,nn
基本上只是将可微函数链接在一起的便捷方式,以及在机器学习中有用的此类函数库。不过,我仍然希望能够指出对整个软件包的良好技术概述。