loadFrozenModel не работает с локальными файлами - PullRequest
0 голосов
/ 11 мая 2018

нужна помощь с async / await.

в настоящее время учатся 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 (async / await), поэтому я использовал babel с babel-preset-env, babel-polyfill и babel-plugin-transform-runtime. Я использовал webpack, но переключился на Parcel в качестве моего упаковщика (как это было предложено разработчиками tenorflow.js). В обоих пакетах я получаю сообщение об ошибке, заключающееся в том, что ожидание должно быть заключено в асинхронную функцию, поэтому я завернул первую часть кода в асинхронную функцию, надеясь получить обещание.

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 (); имеет Обещание недействительным. (так что обещание не было выполнено или было отклонено?) Я пытаюсь ссылаться на файлы модели javascript, используя относительный путь, или это неправильно? Я должен «обслуживать» модель ML из облака? Это не может быть от относительного локального пути?

Любые предложения будут высоко оценены. Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

tf.loadFrozenModel использует извлечение под капотом. Извлечение используется для получения файла, обслуживаемого сервером, и не может использоваться с локальными файлами, если они не обслуживаются сервером. Смотрите этот ответ для получения дополнительной информации.

Чтобы loadFrozenModel работал с локальными файлами, эти файлы должны обслуживаться сервером. Можно использовать http-сервер для обслуживания топологии модели и ее весов.

 // 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')
 })()
0 голосов
/ 23 октября 2018

Вы пытаетесь использовать эту функцию

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();
...