我想做的是转换使用 tf.fromPixels()
创建的张量并将其转换为 [28, 28]
然后用作作为从 Python 训练的模型中获取预测的输入。
我遇到的问题是模型中的第一层,其输入形状为[28, 28]
。当我使用 tf.fromPixels()
在 NodeJS 中创建张量时,我得到一个形状为 [28, 28, 1]
的张量,但是,当我将其输入到模型预测函数我从模型的第一个扁平层收到一条错误消息。
Error when checking : expected flatten_input to have shape [null, 28, 28] but got array with shape [28, 28, 1]
在继续之前,这是我这部分的代码。
prediction: async function(image) {
const model = await tf.loadModel("file://models/model.json");
const canvas = createCanvas(28, 28);
const ctx = canvas.getContext("2d");
loadImage(image).then(function(image) {
ctx.drawImage(image, 0, 0, 28, 28);
var image = tf.fromPixels(canvas, 1);
var prediction = model.predict(image);
return prediction;
});
}
我尝试将张量 reshape 为 [28, 28]
并尝试 [null, 28, 28]
,但是正如您可能想象的那样,当我遇到错误时使用空值。那么我的问题是如何将张量 reshape 为正确的形状?
最佳答案
从 Canvas 中获取图像后,您需要 reshape 张量
var image = tf.fromPixels(canvas, 1);
image = img.reshape([1, 28, 28]);
然后你可以将张量传递给你的模型
关于node.js - 转换 tf.fromPixels() 创建的张量时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545231/