首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorflowJS异步预测

TensorflowJS异步预测
EN

Stack Overflow用户
提问于 2019-05-24 17:29:24
回答 2查看 1.1K关注 0票数 3

我一直在尝试弄清楚如何使用tensorflowJS以异步方式执行预测。我所有的尝试都导致了预测函数阻塞了我的代码。

查看docs,我发现大多数函数都被定义为异步函数,并返回一个promise,例如tf.loadLayersModel,它也可以在没有任何阻塞的情况下异步工作。

但是,predict不返回promise,而是直接返回一个tf.Tensor。我尝试将预测封装在自定义的异步函数中,如下所示:

代码语言:javascript
复制
compute = async(data) => {
  var tensor = tf.tensor(data, [1, 100])
  var prediction = this.model.predict(tensor)
  return prediction.data()
}

但是仍然预测正在阻止我的代码的执行。

使用TensorflowJS进行异步推理的正确方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2019-05-24 18:30:36

问题是您不能将阻塞操作包装在promise中,因为这不仅仅是它的工作方式。看看这个虚构的例子(这基本上就是你正在做的):

代码语言:javascript
复制
const blockFunction = () => {
  const endBlock = Date.now() + 2000
  while(Date.now() < endBlock){}
}

const promisedBlocking = () => new Promise((res, rej) => {
  const endBlock = Date.now() + 2000

  while (Date.now() < endBlock) {}
  return res('I cannot resolve before the blocking IO')
})

console.log('before blocking')
blockFunction()
console.log('after blocking')


console.log('before promised blocking')
promisedBlocking()
.then(console.log)
console.log('after promised blocking')

如果您将tensorflow与node一起使用,则可以将函数调用包装在一个单独的文件中,并使用子进程调用它(请参见fork方法),或者如果您在浏览器中使用TF,则可以使用WebWorkers执行后台函数

票数 0
EN

Stack Overflow用户

发布于 2019-05-24 18:35:00

像这样保证你的代码(基于Promise):

代码语言:javascript
复制
const compute = (data) => {

    try {
        const tensor = tf.tensor(data, [1, 100])
        const prediction = this.model.predict(tensor)
        return Promise.resolve(prediction.data())
    }
    catch(err){

        return Promise.reject(err)

    }

  }

稍后:

代码语言:javascript
复制
compute.then(res => consonle.log(res)).catch(err => console.log(err));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56289685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档