Как создать рваные тензоры с tenorflow.js - PullRequest
1 голос
/ 28 апреля 2019

Кажется, я не могу понять, как создать рваный тензор с tenorflow.js. Я также не могу найти что-либо в API документов.

Я работаю над созданием простого ИИ против кошки и собаки, и у меня есть изображения разных размеров. Я использую fs.readFileSync, чтобы получить буфер, используя метод toJson, а затем использую свойство data для этого объекта, чтобы использовать его в качестве вектора в моих тренировочных данных. Поскольку изображения различны, каждый вектор имеет разный размер и, следовательно, потребность в рваном тензоре. Я уже пытался использовать null или NaN в моей форме, но безрезультатно.

Я также довольно новичок в tenorflow, поэтому любые предложения приветствуются.

Вот мой код:

const tensorflow = require('@tensorflow/tfjs')
const fs = require('fs')

exports.ImagePredict = function (test, ...dataSets) {
  const images = {}

  for(const i of dataSets) {
    images[i.name] = []
    for(const x of i.data) {
      images[i.name].push(fs.readFileSync(x).toJSON().data)
    }

    images[i.name] = tensorflow.tensor(images[i.name], [images[i.name].length, null])
  }

  return images
}

console.log(exports.ImagePredict(null, {name: 'Cat', data: ['../Sets/PetImages/Cat/1.jpg', '../Sets/PetImages/Cat/2.jpg', '../Sets/PetImages/Cat/3.jpg']}))

Я ожидал, что функция возвратит рваный тензор, но вместо этого выдает эту ошибку:

throw new Error(typeof msg === 'string' ? msg : msg());
        ^

Error: Element arr[1] should have 16868 elements, but has 26997 elements
    at Object.assert (C:\Users\Miles\Desktop\AI\tensorflow.js\node_modules\@tensorflow\tfjs-core\dist\util.js:48:15)
    at deepAssertShapeConsistency (C:\Users\Miles\Desktop\AI\tensorflow.js\node_modules\@tensorflow\tfjs-core\dist\tensor_util_env.js:34:12)
    at deepAssertShapeConsistency (C:\Users\Miles\Desktop\AI\tensorflow.js\node_modules\@tensorflow\tfjs-core\dist\tensor_util_env.js:38:9)
    at Object.inferShape (C:\Users\Miles\Desktop\AI\tensorflow.js\node_modules\@tensorflow\tfjs-core\dist\tensor_util_env.js:20:9)
    at Object.tensor (C:\Users\Miles\Desktop\AI\tensorflow.js\node_modules\@tensorflow\tfjs-core\dist\ops\tensor_ops.js:23:43)
    at Object.exports.ImagePredict (C:\Users\Miles\Desktop\AI\tensorflow.js\index.js:13:33)
    at Object.<anonymous> (C:\Users\Miles\Desktop\AI\tensorflow.js\index.js:19:21)
    at Module._compile (internal/modules/cjs/loader.js:736:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:747:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)

1 Ответ

1 голос
/ 28 апреля 2019

В настоящее время tfjs не поддерживает рваный тензор. Если ваши изображения имеют различную форму, подумайте о том, чтобы обрезать их или изменить их размер, чтобы придать форму inputShape вашей модели. На самом деле последний является распространенной обработкой в ​​большинстве моделей классификации

...