我只是想知道,PyTorch如何跟踪张量上的操作(将public function store(Request $request)
{
$data = $request->all();
$leads = $data['Lead_id'];
$subject_ids = $data['Subject_id'];
//insert using foreach loop
foreach($leads as $key => $input) {
$scores = new Score();
$scores->Subject_id = isset($leads[$key]) ? $leads[$key] : ''; //add a default value here
$scores->Lead_id = isset($subject_ids[$key]) ? $subject_ids[$key] : ''; //add a default value here
$scores->save();
}
//insert using array at once
$rows = [];
foreach($leads as $key => $input) {
array_push($rows, [
'Subject_id' => isset($leads[$key]) ? $leads[$key] : '', //add a default value here
'Lead_id' => isset($subject_ids[$key]) ? $subject_ids[$key] : '' //add a default value here
]);
}
Score::insert($rows);
return redirect()->route('scores.create')->with('notif', 'Success.');
}
设置为.requires_grad
之后,以后如何自动计算梯度。请帮助我理解后面的想法True
。谢谢。
答案 0 :(得分:5)
这是一个很好的问题!
通常,自动区分(AutoDiff
)的想法是基于多变量链规则,即
。
这意味着您可以通过“代理”变量y表示x相对于z的导数;实际上,这使您可以分解一堆更简单(或原子)的操作中的几乎所有操作,然后将这些操作“链接”在一起。
现在,像AutoDiff
这样的Autograd
包所做的只是存储这种原子运算块的派生词,例如除法,乘法等。
然后,在运行时,可以轻松地将您提供的前向传递公式(包含多个这些模块)转换为精确的导数。同样,如果您认为AutoDiff不能完全按照自己的意愿进行操作,则还可以为自己的操作提供衍生工具。
AutoDiff优于finite differences之类的导数逼近的优点仅仅是因为这是一个 exact 解决方案。
如果您进一步对它的内部工作方式感兴趣,我强烈建议您使用AutoDidact project,它旨在简化自动微分器的内部,因为通常还涉及很多代码优化。 另外,我参加的这次演讲中的set of slides确实有助于理解。