使用PyTorch进行科学计算

时间:2017-12-24 05:46:56

标签: pytorch

我想将PyTorch用作科学计算包。在这方面它有很多建议 - 它的Tensors基本上是GPU加速的numpy数组,它的autograd机制对于除了神经网络之外的很多东西都有用。

但是,可用的教程和文档似乎非常适合快速让人们使用它进行机器学习。尽管TensorVariable类提供了大量有用的信息(我理解这些材料相当不错),但nnoptim包似乎总是被引入通过示例而不是解释API,这使得很难弄清楚究竟发生了什么。

我现在的主要问题是,我是否可以在不使用optim包的情况下使用nn包,如果可以,那么如何使用nn.Module包。当然,我总是可以将我的模拟实现为nn的子类,即使它们不是神经网络,但我想了解当我这样做时会发生什么,以及它给我带来的好处/弊端特别的应用。

更广泛地说,我希望能够提供指向API的更多逻辑概述的任何资源的指针(具体为optim <?php $id_class = $post['id_room_class']; $response7 = \Unirest\Request::get($uri.'/room/'.$id_class, $headers); //API URI $data7 = $response7->raw_body; // Unparsed body $roomtypeclass = json_decode($data7, true); foreach ($roomtypeclass as $get) { ?> <button class="btn m-btn--square btn-success" data-dismiss="modal" id="btnRoom" onclick="showData2();"> <?php echo $get['code_room']; ?> </button> <?php } ?> ),而不仅仅是展示示例。

1 个答案:

答案 0 :(得分:1)

这是对使用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 {1}}使用var1var2作为参数,只要所有中间步骤都使用变量完成,以便可以区分它。对optimizer.step()的调用将自动更新var1var2的值。

就整体PyTorch的结构而言,似乎optimnn彼此独立,nn基本上只是将可微函数链接在一起的便捷方式,以及在机器学习中有用的此类函数库。不过,我仍然希望能够对整个软件包进行良好的技术概述。