Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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 将结果放入变量中_Javascript_Tensorflow.js - Fatal编程技术网

Javascript 将结果放入变量中

Javascript 将结果放入变量中,javascript,tensorflow.js,Javascript,Tensorflow.js,我有下面的示例代码。我能够从打印功能在控制台中看到正确的结果 // Define a model for linear regression. const model = tf.sequential(); model.add(tf.layers.dense({units: 1, inputShape: [1]})); model.add(tf.layers.dense({units: 4, inputShape: [1]})); model.add(tf.layers.den

我有下面的示例代码。我能够从打印功能在控制台中看到正确的结果

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

  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.tensor2d([1, 2, 3, 4], [4, 1]);
  const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);

  // 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
    answer = model.predict(tf.tensor2d([3], [1, 1]));
    answer.print()

  });
我想做的是将答案放入一个数字变量中,这样我就可以在其他地方使用它。我得到的答案是:

Tensor [[4.9999123],]

但是我想把4.9999放入一个变量中,这样我就可以把它四舍五入并在屏幕上打印出来(用html)

我发现答案是:

    answer.data().then((d)=>{
      console.log(d[0])
    })
answer有一个返回承诺的数据方法。你可以从承诺中得到数据

我找到了这个问题的答案:

Rocksetta在以下网站上发布了他们代码的链接:

最简单的方法是使用,但它会阻塞主线程。如果您对async/await感到满意,那么,
answer.data()
就是解决方案。

有时

最简单的方法是使用answer.dataSync(),但它会阻止 主线程。如果您对async/await感到满意,请回答.data() 这就是解决办法

工作正常,但其他时间

answer.dataSync()
返回一个数组。当面对阵列时,您需要尝试

answer.dataSync()[0]
或者其他一些数组号。同样的问题

await answer.data()[0]

要将张量的值转换为普通JavaScript变量,可以使用TensorflowJs的两个内置函数:一个是同步的,另一个是异步的

将阻止UI线程。因此,只要有可能,应首选异步

常数x=tf.tensor1d([45,48]); x、 打印(); /*异步方式*/ (异步()=>{ const val=wait x.data() //获取第一个元素 console.log(val[0]) })() /*同步方式*/ const val=x.dataSync()[0] console.log(val)
以下是我最喜欢的方式:

var answerdata = await answer.data()
var answerArray = Array.from(answerdata);

answerArray
将被展平,但它又快又简单。如果您正在加载Keras模型或执行其他各种异步操作,通常都处于异步函数中。

如果您需要任何帮助,将不胜感激。谢谢您知道也有一种同步方法可以做到这一点,这很有用。