Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带TensorFlowJS的简单线性回归_Javascript_Tensorflow_Tensorflow.js - Fatal编程技术网

Javascript 带TensorFlowJS的简单线性回归

Javascript 带TensorFlowJS的简单线性回归,javascript,tensorflow,tensorflow.js,Javascript,Tensorflow,Tensorflow.js,我想为一个项目做一些线性回归。 由于我已经习惯了Javascript,我决定尝试使用TensorFlowJS 我正在按照他们网站上的教程进行操作,并观看了一些视频来解释它是如何工作的,但我仍然不明白为什么我的算法没有返回我期望的结果 以下是我正在做的: // Define a model for linear regression. const model = tf.sequential(); model.add(tf.layers.dense({units: 1, inputShape: [1

我想为一个项目做一些线性回归。 由于我已经习惯了Javascript,我决定尝试使用TensorFlowJS

我正在按照他们网站上的教程进行操作,并观看了一些视频来解释它是如何工作的,但我仍然不明白为什么我的算法没有返回我期望的结果

以下是我正在做的:

// Define a model for linear regression.
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));

// Prepare the model for training: Specify the loss and the optimizer.
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});

// Generate some synthetic data for training.
const xs = tf.tensor1d([1, 2, 3, 4]);
const ys = tf.tensor1d([1, 2, 3, 4]);

// Train the model using the data.
model.fit(xs, ys).then(() => {
  // Use the model to do inference on a data point the model hasn't seen before:
  // Open the browser devtools to see the output
  const output = model.predict(tf.tensor2d([5], [1,1]));
  console.log(Array.from(output.dataSync())[0]);
});
我在这里试图得到一个线性图,其中输入应该总是等于输出

我试图预测输入
5
会得到什么,但是输出似乎是随机的


这里它位于codepen上,因此您可以尝试:

您的训练数据需要比模型形状多一个维度,才能反映训练批次。因此x和y至少需要是2D。

您的模型仅在一个历元(一个训练周期)后进行预测。因此,损失仍然很大,导致预测不准确

模型的权重是随机初始化的。因此,只有一个历元,预测是非常随机的。这就是为什么,一个人需要训练一个以上的历元,或者在每个批次之后更新权重(这里您也只有一个批次)。 要了解训练过程中的损耗情况,您可以通过以下方式更改拟合方法:

model.fit(xs, ys, { 
  callbacks: {
      onEpochEnd: (epoch, log) => {
        // display loss
        console.log(epoch, log.loss);
      }
    }}).then(() => {
  // make the prediction after one epoch
})
要获得准确的预测,可以增加历元数

 model.fit(xs, ys, {
      epochs: 50,  
      callbacks: {
          onEpochEnd: (epoch, log) => {
            // display loss
            console.log(epoch, log.loss);
          }
        }}).then(() => {
      // make the prediction after one epoch
    })
下面是一个片段,它展示了增加历代数将如何帮助模型更好地执行

//定义线性回归的模型。
const model=tf.sequential();
add(tf.layers.dense({units:1,inputShape:[1]}));
//为培训准备模型:指定损失和优化器。
compile({loss:'meanSquaredError',优化器:'sgd'});
//生成一些用于培训的合成数据。
常数xs=tf.tensor1d([1,2,3,4]);
常数ys=tf.tensor1d([1,2,3,4]);
//使用数据训练模型。
模型拟合(xs,ys{
年代:50,
回调:{
onEpochEnd:(历元,对数)=>{
控制台日志(历元、日志、丢失);
}
}}).然后(()=>{
//使用模型对模型以前从未见过的数据点进行推断:
//打开浏览器devtools以查看输出
常量输出=模型预测(tf.tensor2d([6],[1,1]);
output.print();
});