Ошибка: Тензор должен иметь форму, состоящую из натуральных чисел, но получившую форму [100,] - PullRequest
1 голос
/ 18 февраля 2020

Чтобы получить помощь от сообщества, мы рекомендуем использовать переполнение стека и тег tensorflow.js.

Версия браузера

отсутствует в браузере с помощью команды Node

Опишите проблему или запрос функции

Я использую tenorflow. js из coco-SSD для mobil enet v2 , когда я использую предварительно обученную модель [coco-ssd], она работает отлично, смотрите приведенный ниже код

const tfnode = require('@tensorflow/tfjs-node');
const cocoSsd = require('./coco-ssd.js'); 
const fs = require('fs');
const readImage = path => {
    const imageBuffer = fs.readFileSync(path);
    const tfimage = tfnode.node.decodeImage(imageBuffer);
    return tfimage;
  }
  const objectDetection = async path => {
    const image = readImage(path);
    const loadlModelPromise = await cocoSsd.load({base: "mobilenet_v2"})
    const result = await loadlModelPromise.detect(image);
    console.log('Classification Results:', result);
  }
  objectDetection(process.argv[2]);

при вызове вышеуказанного кода node filename.js ./testImage.png дает желаемый результат.

Теперь у меня есть специально обученная модель coco-ssd, которую я преобразовал в тензор потока. * Формат 1040 *, используя приведенную ниже команду **tensorflowjs_converter --input_format=tf_saved_model --output_node_names='num_detections,detection_boxes,detection_scores,detection_classes' --signature_name=serving_default --saved_model_tags=serve ./saved_model ./ **, как только у меня будет преобразованная модель . json Я написал приведенный ниже код для вывода на пользовательскую преобразованную модель.

const tfnode = require('@tensorflow/tfjs-node');
const cocoSsd = require('./coco-ssd.js'); 
const fs = require('fs');
const readImage = path => {
    const imageBuffer = fs.readFileSync(path);
    const tfimage = tfnode.node.decodeImage(imageBuffer);
    return tfimage;
  }
  const objectDetection = async path => {
    const image = readImage(path);
    const modelUrl = 'file:///Users/xx/model.json'
    const loadlModelPromise = await cocoSsd.load({base: "mobilenet_v2",modelUrl: modelUrl})
    const result = await loadlModelPromise.detect(image);
    console.log('Classification Results:', result);
  }
  objectDetection(process.argv[2]);

теперь, когда я запускаю приведенный выше код node fileName.js ./testImage.png, получая приведенную ниже ошибку

(узел: 32504) UnhandledPromiseRejectionWarning: Ошибка: Тензор должен иметь форму, состоящую из натуральных чисел, но иметь форму [100,]. at assert (C: \ Us ers \ xx \ tfJs \ node_modules@tensorflow \ tf js -core \ dist \ util. js: 105: 15) в C: \ Users \ xx \ tfJs \ node_modules@tensorflow \ tf js - core \ dist \ util. js: 646: 9 в Array.forEach () в Object.assertNonNegativeIntegerDimensions (C: \ Users \ xx \ tfJs \ node_modules@tensorflow \ tf js -core \ dist \ util. js: 645: 11) в makeTensor (C: \ Users \ xx \ tfJs \ node_modules@tensorflow \ tf js -core \ dist \ ops \ensor_ops. js: 73: 16) в Object. тензор2d (C: \ Users \ xx \ tfJs \ node_modules@tensorflow \ tf js -core \ dist \ ops \ tenor_ops. js: 189: 12) в C: \ Users \ xx \ tfJs \ тензор потока Js Классификатор \ coco-ssd. js: 17: 7039 в C: \ Users \ xx \ tfJs \ node_modules@tensorflow \ tf js -core \ dist \ engine. js: 388: 22 в Engine.scopedRun (C: \ Users \ xx \ tfJs \ node_modules@tensorflow \ tf js -core \ dist \ engine. js: 398: 23) в Engine.tidy (C: \ Пользователи \ xx \ tfJs \ node_modules@tensorflow \ tf js -core \ dist \ engine. js: 387: 21)

, пожалуйста, помогите: -)

...