线性回归与torch7演示

我正在跟随这个演示-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_dxend 

我对这个函数有几个疑问

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

编辑:

我的第4点现在非常清楚。对于那些感兴趣的人 -(来源- 深度学习,牛津,第3次实践实验指导)

enter image description here


回答:

代码中参数x_new(或其副本x)在哪里使用?

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

nidx = (nidx or 0) + 1 是什么意思?

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

函数首次调用时nidx的值是什么?

它在此函数之前从未被设置。在lua中,未设置的变量的值为 nil

dl_dx在哪里更新?理想情况下,它应该在local loss_x更新之后立即更新,但它并没有明确写出

dl_dx 是模型的梯度张量。 model:backward() 计算每个参数的梯度,并将其添加到模型的梯度张量中。因为 dl_dx 是模型的梯度张量,所以它的值会增加。请注意,梯度值是累加的,这就是为什么你需要调用 dl_dx:zero()(将 dl_dx 的值置零),否则你的梯度值会在每次调用 feval 时不断增加。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注