我有以下示例代码。我可以通过打印功能在控制台中看到正确的结果。
// 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()
});
我希望能够将答案放入数字var中,以便我可以在其他地方使用它。我得到的答案是:
Tensor [[4.9999123],]
但是我想将4.9999变成一个变量,这样我就可以将其四舍五入并在屏幕上打印(在html中)。
答案 0 :(得分:2)
最简单的方法是使用answer.dataSync()
,但它会阻止主线程。如果您对async / await感到满意,Record ID:23155736
G8N9 - Select User >> Beatriz Pinho ------- 2018-04-26T09:25:55:55.0000000
2 - Question2 >> Answer2 ------- 2018-04-26T09:25:55:55.0000000
3 - Question3 >> Answer3 ------- 2018-04-26T09:25:55:55.0000000
4 - Question4 >> Answer4 ------- 2018-04-26T09:25:55:55.0000000
5 - Question5 >> Answer5 ------- 2018-04-26T09:25:55:55.0000000
6 - Question6 >> Answer6 ------- 2018-04-26T09:25:55:55.0000000
7 - Question7 >> Answer7 ------- 2018-04-26T09:25:55:55.0000000
8 - Question8 >> Answer8 ------- 2018-04-26T09:25:55:55.0000000
9 - Question9 >> Answer9 ------- 2018-04-26T09:25:55:55.0000000
10 - Question10 >> Answer10 ------- 2018-04-26T09:25:55:55.0000000
11 - Question11 >> Answer11 ------- 2018-04-26T09:25:55:55.0000000
Record ID:2
G8N9 - Select User >> Silent Bob ------- 2018-04-26T09:25:55:55.0000000
2 - Question2 >> Answer2 ------- 2018-04-26T09:25:55:55.0000000
3 - Question3 >> Answer3 ------- 2018-04-26T09:25:55:55.0000000
4 - Question4 >> Answer4 ------- 2018-04-26T09:25:55:55.0000000
5 - Question5 >> Answer5 ------- 2018-04-26T09:25:55:55.0000000
6 - Question6 >> Answer6 ------- 2018-04-26T09:25:55:55.0000000
7 - Question7 >> Answer7 ------- 2018-04-26T09:25:55:55.0000000
8 - Question8 >> Answer8 ------- 2018-04-26T09:25:55:55.0000000
9 - Question9 >> Answer9 ------- 2018-04-26T09:25:55:55.0000000
10 - Question10 >> Answer10 ------- 2018-04-26T09:25:55:55.0000000
11 - Question11 >> Answer11 ------- 2018-04-26T09:25:55:55.0000000
就是解决方案。
答案 1 :(得分:2)
有时候
最简单的方法是使用answer.dataSync(),但它会阻止 主线程。如果您对async / await感到满意,请answer.data() 是解决方案。
工作正常,但其他时间
answer.dataSync()
返回一个数组。当面对阵列时,你需要尝试
answer.dataSync()[0]
或其他一些数组编号。与
相同的问题await answer.data()[0]
答案 2 :(得分:1)
我找到了答案:
answer.data().then((d)=>{
console.log(d[0])
})
answer有一个返回promise的数据方法。您可以从承诺中获取数据。
我搜索了stackoverflow,这引出了我这个问题: Get data from 2D tensor with tensorflow js
Rocksetta在以下网站上发布了他们代码的链接:
答案 3 :(得分:0)
要将Tensor的值转换为普通的JavaScript变量,一个可以使用TensorflowJs的两个内置函数:一个是同步dataSync(),而另一个是异步data()。
dataSync()将阻止UI线程。因此,只要有可能,异步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>
答案 4 :(得分:0)
这是我最喜欢的方式:
var answerdata = await answer.data()
var answerArray = Array.from(answerdata);
answerArray
将被展平,但是它既快速又简单。无论如何,如果要加载Keras模型或执行其他各种异步操作,通常都处于异步函数中。