gpt4 book ai didi

lua - 使用 torch7 演示进行线性回归

转载 作者:行者123 更新时间:2023-11-30 09:29:30 25 4
gpt4 key购买 nike

我正在关注这个演示- https://github.com/torch/demos/blob/master/linear-regression/example-linear-regression.lua

feval = function(x_new)
-- set x to x_new, if differnt
-- (in this simple example, x_new will typically always point to x,
-- so the copy is really useless)
if x ~= x_new then
x:copy(x_new)
end

-- select a new training sample
_nidx_ = (_nidx_ or 0) + 1
if _nidx_ > (#data)[1] then _nidx_ = 1 end

local sample = data[_nidx_]
local target = sample[{ {1} }] -- this funny looking syntax allows
local inputs = sample[{ {2,3} }] -- slicing of arrays.
dl_dx:zero()
local loss_x = criterion:forward(model:forward(inputs), target)
model:backward(inputs, criterion:backward(model.output, target))
return loss_x, dl_dx
end

我对这个函数有一些疑问

  1. 代码中哪里使用了参数 x_new(或其副本 x)?
  2. _nidx_ = (_nidx_ 或 0) + 1 是什么意思?
  3. 首次调用函数时 nidx 的值是多少?
  4. dl_dx 在哪里更新?理想情况下,它应该在本地loss_x更新之后,但没有明确写入

编辑:

我的观点#4 现在已经很清楚了。对于那些有兴趣的人——(来源-深度学习,牛津,实用3实验表)

enter image description here

最佳答案

Where is the argument x_new (or its copy x) used in the code?

x 是模型参数的张量。它之前是通过 x, dl_dx = model:getParameters() 获取的。 model:forward()model:backward() 自动使用此参数张量。 x_new 是模型的一组新参数,由优化器 (SGD) 提供。如果它与模型的参数张量不同,模型的参数将通过 x:copy(x_new) 设置为这些新参数(张量的 x_new 的就地副本)值到x)。

What does nidx = (nidx or 0) + 1 mean?

它将 _nidx_ 的值增加 1 ((_nidx_) + 1) 或将其设置为 1 > ((0) + 1) 如果 _nidx_ 尚未定义。

what is the value of nidx when the function is first called?

在该函数之前从未设置过它。尚未设置的变量在 lua 中的值为 nil

Where is dl_dx updated? Ideally it should have been just after local loss_x is updated, but it isnt written explicitly

dl_dx 是模型的梯度张量。 model:backward() 计算给定损失的每个参数的梯度并将其添加到模型的梯度张量中。由于 dl_dx 是模型的梯度张量,因此它的值将会增加。请注意,梯度值是添加的,这就是为什么您需要调用dl_dx:zero()(就地设置dl_dx的值)为零),否则每次调用 feval 时,梯度值都会不断增加。

关于lua - 使用 torch7 演示进行线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37454746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com