我想将PyTorch用作科学计算包。在这方面它有很多建议 - 它的Tensors基本上是GPU加速的numpy数组,它的autograd
机制对于除了神经网络之外的很多东西都有用。
但是,可用的教程和文档似乎非常适合快速让人们使用它进行机器学习。尽管Tensor
和Variable
类提供了大量有用的信息(我理解这些材料相当不错),但nn
和optim
包似乎总是被引入通过示例而不是解释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 } ?>
),而不仅仅是展示示例。
答案 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}}使用var1
和var2
作为参数,只要所有中间步骤都使用变量完成,以便可以区分它。对optimizer.step()
的调用将自动更新var1
和var2
的值。
就整体PyTorch的结构而言,似乎optim
和nn
彼此独立,nn
基本上只是将可微函数链接在一起的便捷方式,以及在机器学习中有用的此类函数库。不过,我仍然希望能够对整个软件包进行良好的技术概述。