【问题标题】:How to create ragged tensors with tensorflow.js如何使用 tensorflow.js 创建参差不齐的张量
【发布时间】:2019-04-28 01:11:20
【问题描述】:

我似乎不知道如何使用 tensorflow.js 创建一个参差不齐的张量。我在 api 文档中也找不到任何内容。

我正在制作一个简单的猫对狗 AI,并制作不同大小的图像。我正在使用fs.readFileSync 获取缓冲区,使用toJson 方法,然后使用该对象上的data 属性在我的训练数据中用作向量。因为图像不同,每个向量的大小都不同,因此需要不规则的张量。我已经尝试在我的形状中使用null 或NaN,但没有结果。

我也是 tensorflow 的新手,欢迎提出任何建议。

这是我的代码:

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)

【问题讨论】:

    标签: javascript tensorflow.js ragged


    【解决方案1】:

    目前,tfjs 不支持不规则张量。如果您的图像具有不同的形状,请考虑裁剪它们或调整它们的大小以适应模型的 inputShape 形状。其实后者是大多数分类模型中常见的处理

    【讨论】:

    • 我有超过 25500 张图片,有什么方法可以批量裁剪它们吗?
    • 最简单的方法是对所有元素进行 for 循环并裁剪它们。但我认为可以使用tf.data 方法创建数据管道,该方法将图像数组作为输入并返回裁剪图像的 tf.data.Dataset
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多