变量与损失函数的结果之间没有任何联系

时间:2019-01-31 02:10:54

标签: tensorflow.js

我使用的优化程序没有在变量和损失函数之间找到联系。

我通常是机器学习的新手,我正在尝试为方程y = a * 2 ^(t / b)构建曲线拟合应用程序。可训练变量为“ a”和“ b”。现在,我正在使用一些综合数据对其进行测试。

// Declare variables 
const a = tf.variable(tf.scalar(Math.random()));  
const b = tf.variable(tf.scalar(Math.random()));
const year = tf.tensor1d([1,2,3,4]);

//Declare optimizer
var optimizer = tf.train.sgd(learningRate);

// y = a * 2^(t/b)
function Moore(t){                      
var Moore_results = [];
aPrime = a.dataSync();
bPrime = b.dataSync();
tPrime = t.dataSync();
for(i = 0; i < tPrime.length; i++){
  Moore_results.push(aPrime * Math.pow(2,(tPrime[i]/bPrime)) );}
  const tensorMoore = tf.variable(tf.tensor1d(Moore_results));
  return tensorMoore;}

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

//Optimize loss function
optimizer.minimize(() => loss(Moore(year),year));

运行优化器时出现错误。

  

找不到任何变量与损失结果>函数y = f(x)之间的连接。请确保使用变量的操作在传递给minimum()的函数f内。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

给定预测值与期望值之间的损失,优化器将尝试优化使用tf.variable创建的变量张量。您必须通过以下预测值:

function predict(t) {
  // y = a * 2 ^ (t / b)
  return tf.tidy(() => {
    return a.mul(tf.scalar(2)) // a * 2
      .pow(t.div(b)) // ^ (t / b)
  });
}

for (let iter = 0; iter < numIterations; iter++) {
  optimizer.minimize(() => {
    const predsYs = predict(xs);
    return loss(predsYs, ys);
  });
}

然后优化器将计算最能预测模型的a和b的值