我已经在Keras(20个单元)中训练了一个简单的双向LSTM网络,并通过导出了模型
tfjs.converters.save_keras_model(model, 'myModel')
该模型大53kb。在我的JavaScript应用中,我像这样加载模型
var model;
async function loadModel() {;
model = await tf.loadModel('https://example.com/myModel.json');
}
然后我用
运行预测async function predict(input) {
var pred = model.predict(input);
...
}
加载模型需要5到6秒钟,这很好。但是令我困扰的是,每次调用define()也需要5-6秒。每次。对于我的用例,我需要预测要非常快,不超过1秒。
我的问题是:这正常吗?还是我的代码有问题?
编辑:这是一个codepen:https://codepen.io/anon/pen/XygXRP
顺便说一句,model.predict正在阻止用户界面-如何防止这种情况发生?
答案 0 :(得分:0)
您的UI被阻止,因为您没有要求线程等待预测结果,这意味着它正在同步运行,而不是异步运行。您可以使用await关键字来解决此问题,例如var pred =等待model.predict(input)。
您的其余代码似乎很好,所以延迟似乎是由于您的实际模型造成的,因为我看到我的CPU几乎没有税来运行您的模型。
值得阅读tensorflowjs博客post,因为它们为您提供了如何提高模型效率以在浏览器中进行更快推理的示例。