kaieye / 2022-Machine-Learning-Specialization

3.95k stars 1.55k forks source link

为啥我的训练损失值不对呢 #24

Closed xuejiangping closed 1 year ago

xuejiangping commented 1 year ago

请问一下,为啥我的训练损失值不对呢,越来越大,是不是哪里有问题

/**
 *  @param {[xi:number,yi:number][]} dataArr
 */
function start(dataArr) {

  //线性函数模板

  const yFn = (w,b,x) => w * x + b
  // 样本数量
  const m = dataArr.length
  /**
 * 损失函数 J
 * @param {number} w 
 * @param {number} b 
 */
  const J = (w,b) => dataArr.reduce((t,[xi,yi]) => t + (yFn(w,b,xi) - yi) ** 2,0) / (m * 2)

  // 获取 w,b关于 损失函数J的 导数
  const get_dj_wb = (w,b) => dataArr.reduce((t,[xi,yi],i) => {
    t.dj_dw += (yFn(w,b,xi) - yi) * xi
    t.dj_db += (yFn(w,b,xi) - yi)
    if (i + 1 === m) {
      t.dj_dw /= m
      t.dj_db /= m
    }
    return t
  },{ dj_dw: 0,dj_db: 0 })

  //初始参数 w ,b
  let w = 0,b = 0
  // 学习率
  let L = 0.01

  //开始训练
  for (let i = 0; i < 10; i++) {
    let sun_shi = J(w,b)
    console.log('sun_shi',sun_shi)
    console.log('w',w)
    console.log('b',b)
    let { dj_dw,dj_db } = get_dj_wb(w,b)
    w = w - L * dj_dw
    b = b - L * dj_db
  }

}