【问题标题】:loadFrozenModel does not work with local filesloadFrozenModel 不适用于本地文件
【发布时间】:2018-05-11 15:32:21
【问题描述】:

在异步/等待方面需要帮助。

目前正在学习https://github.com/tensorflow/tfjs-converter

我对这部分代码感到困惑(加载我的 python 转换保存的 js 模型以在浏览器中使用):

import * as tf from '@tensorflow/tfjs';
import {loadFrozenModel} from '@tensorflow/tfjs-converter';

/*1st model loader*/
const MODEL_URL = './model/web_model.pb';
const WEIGHTS_URL = '.model/weights_manifest.json';
const model = await loadFrozenModel(MODEL_URL, WEIGHTS_URL);

/*2nd model execution in browser*/
const cat = document.getElementById('cat');
model.execute({input: tf.fromPixels(cat)});

我注意到它使用的是 es6(导入/导出)和 es2017(异步/等待),所以我将 babel 与 babel-preset-env、babel-polyfill 和 babel-plugin-transform-runtime 一起使用。我使用了 webpack,但切换到 Parcel 作为我的捆绑器(正如 tensorflow.js 开发人员所建议的那样)。在这两个捆绑器中,我不断收到等待应该包装在异步函数中的错误,因此我将代码的第一部分包装在异步函数中,希望获得 Promise。

async function loadMod(){

const MODEL_URL = './model/web_model.pb';
const WEIGHTS_URL = '.model/weights_manifest.json';
const model = await loadFrozenModel(MODEL_URL, WEIGHTS_URL);

} 

loadMod();

现在两个构建器都说“等待是保留字”。 vscode eslinter 说 loadMod();有一个 Promise 无效。 (所以承诺失败或被拒绝?) 我正在尝试使用相对路径引用 javascript 模型文件,或者这是错误的吗?我必须从云端“服务”机器学习模型吗?它不能来自相对本地路径?

任何建议将不胜感激。谢谢!

【问题讨论】:

  • 以异步方式包装内容的最简单方法是(async () => { your code})()

标签: javascript asynchronous tensorflow async-await tensorflow.js


【解决方案1】:

tf.loadFrozenModel 在后台使用fetch。 Fetch 用于获取由服务器提供的文件,并且不能与本地文件一起使用,除非这些文件由服务器提供。有关更多信息,请参阅此answer

要让loadFrozenModel 处理本地文件,这些文件需要由服务器提供服务。可以使用http-server 为模型拓扑及其权重提供服务。

 // install the http-server module
 npm install http-server -g

 // cd to the repository containing the files
 // launch the server to serve static files of model topology and weights
 http-server -c1 --cors .

 // load model in js script
 (async () => {
   ...
   const model = await tf.loadFrozenModel('http://localhost:8080/tensorflowjs_model.pb', 'http://localhost:8080/weights_manifest.json')
 })()

【讨论】:

    【解决方案2】:

    你尝试使用这个功能

    tf.loadFrozenModel(MODEL_FILE_URL, WEIGHT_MANIFEST_FILE_URL)
    

    而且您的代码有语法错误。如果使用关键字'await',则必须定义一个异步函数,如下所示:

    async function run () {
    
      /*1st model loader*/
      MODEL_URL = './model/web_model.pb';
      const WEIGHTS_URL = '.model/weights_manifest.json';
      const model = await loadFrozenModel(MODEL_URL, WEIGHTS_URL);
    
     /*2nd model execution in browser*/
     const cat = document.getElementById('cat');
     model.execute({input: tf.fromPixels(cat)});
    
    }
    run();
    

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 2016-01-10
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多