javascript - Tensorflow.js请确保使用变量的操作位于传递给minimum()的函数f内

标签 javascript tensorflow tensorflow.js

我已经开始使用 javascript 和 TensorFlow.js 来处理一些机器学习项目,我正在创建一个线性回归模型,但是,我无法弄清楚是什么导致了这个错误

找不到任何变量与损失函数y=f(x)的结果之间的联系。请确保使用变量的操作位于传递给 minimize() 的函数 f 内。"

我创建了两个张量

globalTensorXs = tf.tensor2d(globaArrayXs); //input data
globalTensorYs =  tf.tensor1d(globaArrayYs); //y output

我创建了如下所示的系数/权重作为 tf 标量数组。

function createWeights(_numWeights)
{       
  for ( var x = 0; x < _numWeights; x++)
  {
  globalWeightsTensorArr.push(tf.variable(tf.scalar(Math.random())));  
 }      
} 

有一个训练函数,我将 x 和 y 张量传递到其中,这是对 optimise.minimize 的调用导致了问题。它不会检测存储在 globalWeightsTensorArr 中的训练变量

async function train(xsTensor, ysTensor, numIterations)
{

    /*//////OPTIMISER.MINIMISE/////////////
    Minimize takes a function that does two things:
    It predicts y values for all the x values using the predict 
    model function. 
    It returns the mean squared error loss for those predictions 
    using the loss function. Minimize then automatically adjusts any 
    Variables used by thi predict/loss function in order to minimize 
    the return value (our loss), in this case the variables are in 
    "globalWeightsTensorArr" which contains the coefficient values 
     to be altered by the modeld during "numIterations" iterations of 
     SGD.
*/

  for (let iter = 0; iter < numIterations; iter++) 
  {     
      optimiser.minimize(function ()
      {
        return loss(predict(xsTensor), ysTensor);
       }, globalWeightsTensorArr);          
  }

}

//预测和损失函数在这里...

//以下代码构造一个预测函数,该函数接受输入(X's)//并返回预测 Y:它代表我们的“模型”。给定输入//'xs' 它将尝试*预测适当的输出 'y'。

function predict(_Xs) 
{           
    return tf.tidy(() => {  
    for ( var x = 0; x < 8; x++)
        globalWeightsArr[x] = globalWeightsTensorArr[x].dataSync();
        const weightTensor =  tf.tensor1d(globalWeightsArr); 
        const prediction = tf.dot(_Xs, weightTensor);
        return prediction;
 });        
}

//损失函数从预测函数中获取预测 //和实际标签并调整权重 //权重被认为是影响函数的任何张量变量我们可以在TensorFlow.js中定义MSE损失函数,如下所示:

function loss(_predictedTensor, _labels) 
{
const meanSquareError =_predictedTensor.sub(_labels).square().mean();
return meanSquareError ;
}

谁能帮忙解释一下这个问题吗?

问候 艾迪恩

最佳答案

我们通过更改权重/系数的创建方式解决了该问题。现在,minimize 可以检测预测使用的变量,并相应地调整它们。稍后我会将整个解决方案发布到codepen。仍在学习!

function createWeights(_numWeights) {
    const randomTensor = tf.randomUniform([_numWeights, 1]);
    globalWeightsTensorVar = tf.variable(randomTensor);
}

这是b使用的预测函数

function predictLogical(_Xs) {

    return tf.dot(_Xs, globalWeightsTensorVar);
}

关于javascript - Tensorflow.js请确保使用变量的操作位于传递给minimum()的函数f内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027243/

相关文章:

tensorflow - `tf.data.Dataset.map` 是否保留输入顺序?

node.js - 我是否必须重新安装 CUDA 9.0 才能使用 tfjs-node-gpu?

javascript - HTML加载后编译JS

javascript - 如何在 MVC 应用程序中管理 session

python - Mac 上的 TensorFlow 安装错误

tensorflow - 我转换后的 tensorflow 迁移学习模型总是在 Tensorflow JS 中返回相同的结果

python - 将 retrain.py 的输出转换为 tensorflow.js

javascript - 带有 jQ​​ueryMobile-Router 的 Require.js

javascript - 将页面直接加载到 anchor 标记

python - 如何使用 tf.where() 根据条件替换特定值