将结果放入变量
Getting the result into a variable
我有以下示例代码。我能够从打印功能的控制台中看到正确的结果。
// 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 放入一个变量中,以便我可以将它四舍五入为 5 并将其打印在屏幕上(在 html 中)。
我发现答案是:
answer.data().then((d)=>{
console.log(d[0])
})
answer 有一个 returns 承诺的数据方法。您可以从承诺中获取数据。
我搜索了 Whosebug,这让我想到了这个问题:
Get data from 2D tensor with tensorflow js
Rocksetta 在以下网站上向他们的代码发布了 link:
最简单的方法是使用answer.dataSync()
,但是会阻塞主线程。如果您对 async / await 感到满意,answer.data()
就是解决方案。
有时
The easiest way is to use answer.dataSync(), but it will block the
main thread. If you are comfortable with async / await, answer.data()
is the solution.
工作正常,但其他时候
answer.dataSync()
returns 一个数组。当面对数组时,你需要尝试
answer.dataSync()[0]
或其他一些数组编号。
同样的问题
await answer.data()[0]
要将Tensor的值转化为普通的JavaScript变量,可以使用TensorflowJs的两个内置函数:一个是同步的dataSync() and the other is asynchronous data().
dataSync() will block the UI thread. So whenever possible the asynchronous data()应该是首选。
const x = tf.tensor1d([45, 48]);
x.print();
/* Async way */
(async () => {
const val = await x.data()
// get the first element
console.log(val[0])
})()
/* Sync way */
const val = x.dataSync()[0]
console.log(val)
<html>
<head>
<!-- Load TensorFlow.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/tensorflow/0.12.4/tf.js"> </script>
</head>
<body>
</body>
</html>
这是我最喜欢的方式:
var answerdata = await answer.data()
var answerArray = Array.from(answerdata);
answerArray
会被压平,但它又快又简单。如果您正在加载 Keras 模型或执行各种其他异步操作,您通常会使用异步函数。
我有以下示例代码。我能够从打印功能的控制台中看到正确的结果。
// 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 放入一个变量中,以便我可以将它四舍五入为 5 并将其打印在屏幕上(在 html 中)。
我发现答案是:
answer.data().then((d)=>{
console.log(d[0])
})
answer 有一个 returns 承诺的数据方法。您可以从承诺中获取数据。
我搜索了 Whosebug,这让我想到了这个问题: Get data from 2D tensor with tensorflow js
Rocksetta 在以下网站上向他们的代码发布了 link:
最简单的方法是使用answer.dataSync()
,但是会阻塞主线程。如果您对 async / await 感到满意,answer.data()
就是解决方案。
有时
The easiest way is to use answer.dataSync(), but it will block the main thread. If you are comfortable with async / await, answer.data() is the solution.
工作正常,但其他时候
answer.dataSync()
returns 一个数组。当面对数组时,你需要尝试
answer.dataSync()[0]
或其他一些数组编号。
同样的问题await answer.data()[0]
要将Tensor的值转化为普通的JavaScript变量,可以使用TensorflowJs的两个内置函数:一个是同步的dataSync() and the other is asynchronous data().
dataSync() will block the UI thread. So whenever possible the asynchronous data()应该是首选。
const x = tf.tensor1d([45, 48]);
x.print();
/* Async way */
(async () => {
const val = await x.data()
// get the first element
console.log(val[0])
})()
/* Sync way */
const val = x.dataSync()[0]
console.log(val)
<html>
<head>
<!-- Load TensorFlow.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/tensorflow/0.12.4/tf.js"> </script>
</head>
<body>
</body>
</html>
这是我最喜欢的方式:
var answerdata = await answer.data()
var answerArray = Array.from(answerdata);
answerArray
会被压平,但它又快又简单。如果您正在加载 Keras 模型或执行各种其他异步操作,您通常会使用异步函数。