【问题标题】:Gradient-descent code error梯度下降代码错误
【发布时间】:2016-11-02 08:25:29
【问题描述】:

我为梯度下降算法编写了下面的代码。我收到一个错误,谁能告诉我为什么以及如何解决它?

gradient <- function(h, start, alpha = 0.01, tolerance = 0.0001, debug = FALSE) {      
    MAXITER <- 1000
    x_old <- start      
    iter <- 0    

    cat("gradient descent minimization =\n")
    if (debug == TRUE) cat("iter=", iter,", value=", x_old, "\n")

    repeat {
        iter <- iter + 1
        x_new <- x_old - alpha*h(x_old)
        if (debug == TRUE) cat("iter=", iter,", value=", x_new, "\n")
        if (abs(x_old - x_new) < tolerance) break    
        if (iter > MAXITER) break
        x_old <- x_new    
    }
    cat("total number of interations =", iter, "\n")
    cat("last diference =", abs(x_old - x_new), "\n")
    cat("final value =", x_new, "\n")
    cat("final function value =", h(x_new), "\n")    
}

h <- function(x){ x^4 - 8*x^2 + 2*x }

gradient(h, -5, tolerance = 0.0001)

...

gradient descent minimization =

Error in if (abs(x_old - x_new) < tolerance) break :     
  missing value where TRUE/FALSE needed

【问题讨论】:

  • 选择你的代码然后按Ctrl-K缩进就这么难吗?
  • 文体点:而不是iter &lt;- 0; ... repeat { iter &lt;- iter + 1; ... if (iter &gt; MAXITER) break ...}只是一个变相的for循环:for (iter in 1:MAXITER) { ... }
  • 您为什么不尝试拨打gradient(..., debug = TRUE)?打印语句使答案立即跳出。这真的是你自己的代码吗?我对此表示怀疑。
  • 您可以可视化您的 gradient function h in WolframAlpha ,这将帮助您调试如果您从 x_start = -5 开始会发生什么。其实我们应该看the integral of h dx,而不是梯度h。

标签: r optimization gradient-descent


【解决方案1】:

我只是运行你的代码。这里存在数值不稳定。在x_new &lt;- x_old - alpha*h(x_old) 语句之后添加条件if(is.nan(x_new)) break。

【讨论】:

  • 我认为它有效,但我现在得到一个不同的错误:>梯度(h,-5,容差 = 0.0001)梯度下降最小化 = 交互总数 = 7 绝对错误(x_old - x_new, "\n") :传递给 'abs' 的 2 个参数需要 1 个调用自:cat("last diference =", abs(x_old - x_new, "\n")) Browse[1]> Q
  • cat("last diference =", abs(x_old - x_new, "\n")) 有语法错误,应该是cat("last diference =", abs(x_old - x_new), "\n")
  • 实际上对于代码的设置方式,您需要预先检查两个步骤。所以用if(is.nan(h(x_new - alpha*h(x_new)))) break替换if(is.nan(x_new)) break。
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2016-06-13
  • 1970-01-01
相关资源
最近更新 更多