首页 > 解决方案 > 任何变量与损失函数的结果之间没有联系

问题描述

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

一般来说,我是机器学习的新手,我正在尝试为方程 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));

当我运行优化器时,我得到了错误。

无法找到任何变量与损失结果之间的联系 >function y=f(x)。请确保使用变量的操作在 > 传递给最小化()的函数 f 中。

任何帮助是极大的赞赏。

标签: tensorflow.js

解决方案


优化器尝试优化在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 的值


推荐阅读