tensorflow.js 损失趋于无穷大

Ome*_*dar 5 tensorflow tensorflow.js

我正在尝试制作一个简单的项目来使用 tensorflow.js 模型查找方程的系数。然而,当运行时,损失接近无穷大并在 4 次左右的迭代内变为 NaN。我不知道为什么会发生这种情况。这是我的代码:

let xs = [];
let ys = [];

let aReal = Math.random();
let bReal = Math.random();
let cReal = Math.random();
let dReal = Math.random();

for (let i = -100; i < 100; i+=1) {
    xs.push(i);
    ys.push((aReal*Math.pow(i, 3) + bReal*Math.pow(i, 2) + cReal*i + dReal) + Math.random()*10-1);
}

const a = tf.variable(tf.scalar(Math.random()));
const b = tf.variable(tf.scalar(Math.random()));
const c = tf.variable(tf.scalar(Math.random()));
const d = tf.variable(tf.scalar(Math.random()));



function predict(x) {
  return tf.tidy(() => {
    return a.mul(x.pow(tf.scalar(3, 'int32')))
      .add(b.mul(x.square()))
      .add(c.mul(x))
      .add(d);
  });
}

function loss(predictions, labels) {
  const meanSquareError = predictions.sub(labels).square().mean();
  print(meanSquareError.dataSync());
  return meanSquareError;
}

function train(xS, yS, numIterations) {
  const learningRate = 0.1;
  const optimizer = tf.train.sgd(learningRate);

  console.log(xS.dataSync(), yS.dataSync());

  for (let iter = 0; iter < numIterations; iter++) {
    optimizer.minimize(() => {
      const predYs = predict(xS);
      return loss(predYs, yS);
    });

  }
}

train(tf.tensor(xs), tf.tensor(ys), 100);

let yPred = predict(tf.tensor(xs)).dataSync();

console.log(yPred);

let trace1 = {
    x: xs,
    y: ys,
    mode: 'markers',
    type: 'scatter'
};

let trace2 = {
  x: xs,
  y: yPred,
  mode: 'lines',
};

console.log(aReal, bReal, cReal, dReal);
console.log(a.dataSync(), b.dataSync(), c.dataSync(), d.dataSync());

let graphData = [trace1, trace2];

Plotly.newPlot('graph', graphData);
Run Code Online (Sandbox Code Playgroud)

Plotly 只是我用来绘制数据的 js 库。

Ble*_*Key 2

尝试降低学习率。一旦稳定,您就可以将其调整回速度训练。如果它太高,你会得到不稳定和 NaN

const learningRate = 0.0001;