我想使用PyTorch作为一个科学计算软件包。它在这方面有很多值得推荐的地方-它的张量基本上是GPU加速的numpy数组,它的autograd机制除了神经网络之外,还可能对许多事情有用。
然而,可用的教程和文档似乎非常适合让人们快速上手并使用它进行机器学习。尽管有许多关于Tensor和Variable类的有用信息(我对这些信息理解得相当好),但nn和optim包似乎总是通过示例而不是通过解释API来引入的,这使得很难弄清楚到底是怎么回事。
在这一点上,我的主要问题是是否可以在不使用nn包的情况下使用optim包,如果可以,如何使用。当然,我总是可以将我的模拟实现为nn.Module的子类,即使它们不是神经网络,但我想了解当我这样做时,幕后会发生什么,以及它会给我的特定应用程序带来什么好处/缺点。
从更广泛的角度来看,我希望能给出更多关于API的逻辑概述(特别是针对nn和optim )的参考资料,而不仅仅是提供示例。
发布于 2017-12-25 10:49:20
这是对在不使用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计算output,只要所有中间步骤都使用变量来完成,以便可以区分。对optimizer.step()的调用将自动更新var1和var2的值。
就PyTorch的整体结构而言,optim和nn似乎彼此独立,nn基本上只是一种将可微函数链接在一起的便捷方法,以及一个在机器学习中有用的函数库。不过,我还是希望能给出一个很好的整个包的技术概述。
https://stackoverflow.com/questions/47958359
复制相似问题