如何使用 tensorflow.js 创建参差不齐的张量
How to create ragged tensors with tensorflow.js
我似乎无法弄清楚如何使用 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']}))
我希望函数 return 是一个参差不齐的张量,但它抛出了这个错误:
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)
目前,tfjs 不支持参差不齐的张量。如果您的图像具有不同的形状,请考虑裁剪它们或调整它们的大小以使其具有模型的 inputShape 形状。实际上后者是大多数分类模型中的常见处理
我似乎无法弄清楚如何使用 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']}))
我希望函数 return 是一个参差不齐的张量,但它抛出了这个错误:
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)
目前,tfjs 不支持参差不齐的张量。如果您的图像具有不同的形状,请考虑裁剪它们或调整它们的大小以使其具有模型的 inputShape 形状。实际上后者是大多数分类模型中的常见处理