Tensorflow.js сохранить модель, используя узел - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу сохранить обученную модель из node.js с помощью этой функции

async function tfModelExperiment(model) {
  try {
    let tsModelTraining = await model.save('file:///tmp/my-model-1');
  } 
  catch (error) {
    console.log(error);
  }
}

но при сохранении модели возвращается

(узел: 23756) UnhandledPromiseRejectionWarning: Ошибка: не удается найти какие-либо сохранить обработчики для URL 'file: /// tmp / my-model-1'

Я нашел другого человека, который боролся с этой проблемой, но она была исправлена ​​включением

const tf = require('@tensorflow/tfjs');

Что у меня уже было, я пытался сменить каталог на свой домашний каталог, но это не решило проблему, и при этом я не запустил его как sudo, что я мог сделать неправильно?

Программное обеспечение Я использую Ubuntu Ubuntu 18.04.1 LTS с самым последним пакетом TensorFlow.js (0.13.0), установленным с npm

EDIT:

Следует отметить, что я пробовал

import * as tf from '@tensorflow/tfjs';
import '@tensorflow/tfjs-node';

Как указано здесь (https://github.com/caisq/tfjs-node),, который возвращает

TypeError: tf.sequential не является функцией в файле: ///home/sjors/node.mjs: 7: 18 в ModuleJob.run (внутренний / загрузчик / ModuleJob.js: 94: 14) в

И я попробовал:

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

, который возвращает ту же ошибку UnhandledPromiseRejectionWarning, что и раньше

Ответы [ 4 ]

0 голосов
/ 07 февраля 2019

Я использовал tfjs-node-save из https://www.npmjs.com/package/tfjs-node-save, и успешно.

процесс:

npm i @tensorflow/tfjs

npm i tfjs-node-save

код: в основном такой же, как @ Jonas

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));

model.save('file://./model-1a');
0 голосов
/ 22 сентября 2018

Теперь я работаю с помощью парней из tfjs из github.

В основном вам нужно установить только зависимость узла tfjs:

npm i @tensorflow/tfjs-node

Тогда вы можете просто требовать tfjs, и это должно работать.

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));

model.save('file://./model-1a');
0 голосов
/ 24 ноября 2018

У меня была такая же проблема "Не удается найти обработчики сохранения для URL" при попытке использовать model.save (). Решение моей проблемы было немного другим.

Мне наконец удалось правильно установить его, удалив предыдущие пакеты и выполнив локальную установку ( npm install имя_пакета ) вместо глобальной установки ( npm install -g имя_пакета ) , Затем я скопировал локальные node_modules в место, куда они попадают при глобальной установке:

rm -rf /usr/local/lib/node_modules/@tensorflow
cp -ax node_modules/* /usr/local/lib/node_modules/

Следующее НЕ install @ tenorflow / tfjs и другие 29 связанных пакетов (adm-zip ... yallist):

npm install -g @tensorflow/tfjs-node

Да , я выполнил команду как пользователь root , если вас интересует привилегии.

Я использовал npm v6.4.1:

npm list -g --depth=0
/usr/local/lib
├── @tensorflow/tfjs-node@0.1.21
├── express@4.16.4
├── npm@6.4.1
└── socket.io@2.1.1
0 голосов
/ 16 сентября 2018

Ваша асинхронная функция читает строку await внутри нее и выполняет JS promise. Обещанием является JS-компилятор, выполняющий удаленный фрагмент кода и гарантирующий асинхронную функцию, что значение будет доставлено ему в будущем (отсюда и название обещания).

Итак, в вашем случае Node смотрит на model.save('file:///tmp/my-model-1') и не находит .save метода, который может обработать ответ от обещания. Вот почему ваши ошибки говорят о необработанных ответах / обещаниях.

В последней части этой проблемы говорится, что у вас нет обработчиков ошибок. Используя шаблон async/await JS, вы обычно заключаете вызовы await в try, а обработчики ошибок в catch.

Наконец, вы упоминаете код require, решающий проблему. require предоставляет вашему файлу JS доступ к библиотеке tenorflow, что исправит ошибку model.save (). Но в более новых версиях JS (называемых ES6 / 7/8) require был заменен на import - они выполняют то же самое, но выглядят немного по-другому.

В совокупности ваш код JS будет выглядеть примерно так:

// Do the TS import
import * as tf from '@tensorflow/tfjs';

// Set up TS model
const model = tf.sequential();

async function tfModelExperiment() {
  try {
    let tsModelTraining = await model.save();
    // Missing code where you would handle `tsModelTraining`
  } 
  catch (error) {
    // Handle the error in here
    console.log(error);
  }
}
tfModelExperiment();
...