Как загрузить преобразованную предварительно обученную модель keras в Tensorflow.js использование Node.js ?

#node.js #tensorflow #tensorflowjs-converter

#node.js #tensorflow #tensorflowjs-конвертер

Вопрос:

У меня есть предварительно обученные модели keras, которые я собрал с помощью TensorflowJs Converter. Я пытаюсь загрузить их в следующем скрипте

(index.js )

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

require('@tensorflow/tfjs-node');
global.fetch = require('node-fetch')

const model = tf.loadLayersModel(
     'model/model.json');
  

При выполнении я получаю следующую ошибку node index.js

 (node:28543) UnhandledPromiseRejectionWarning: Error: Request for model/decoder-model/model.json failed due to error: TypeError: Only absolute URLs are supported
  

и

 (node:28543) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)
(node:28543) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
  

Я также пробовал это

 const model = tf.loadLayersModel(
     'https://storage.googleapis.com/tfjs-models/tfjs/iris_v1/model.json');
  

Но здесь я получаю

 (node:28772) UnhandledPromiseRejectionWarning: Error: Found more than one (2) load handlers for URL 'https://storage.googleapis.com/tfjs-models/tfjs/iris_v1/model.json'
  

Системная информация

Node v10.15.3 и TensorflowJs v1.0.1

Комментарии:

1. Зависимости Package.json ` «dependencies»: { «@tensorflow/tfjs»: «^1.0.1», «@tensorflow/tfjs-node»: «^1.0.1», «node-fetch»: «^2.3.0» }`

Ответ №1:

Заменить

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

С помощью

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

И удалите строку

 require('@tensorflow/tfjs-node');
  

Затем, если вы загружаете модель из локальной файловой системы, добавьте ‘file://’ в начало аргумента, который вы предоставляете loadLayersModel().

И это должно сработать

Ответ №2:

Первая ошибка очевидна: требуется абсолютный URL ( '/model/model.json' ), но вы вводите ему относительный URL ( 'model/model.json' ).

Вторая ошибка также довольно понятна, ошибка сообщает вам, что предыдущая выданная ошибка не была перехвачена (следовательно Unhandled ).

Для последнего, пожалуйста, смотрите https://github.com/tensorflow/tfjs/issues/779 или https://github.com/tensorflow/tfjs/issues/622

Я думаю, это связано с тем, что смешиваются CUDA и не-CUDA вещи. Сначала проверьте свой packages.json .

Комментарии:

1. Я изменил абсолютный URL UnhandledPromiseRejectionWarning: Error: Request for /model/decoder-model/model.json failed due to error: TypeError: Only absolute URLs are supported

2. @n00b lol ок, а затем вы правильно попробовали полный URL, что это вам дало

3. Я опубликовал ошибку в предыдущем комментарии. Это то, что вы ищете?

4. @n00b нет, в чем ошибка, когда вы вводите полный URL, начинающийся с http (ов).