转换tf.fromPixels()创建的张量时遇到问题



我要做的是转换使用tf.fromPixels()创建的张量,并将其转换为[28, 28],然后用作输入,从Python中训练的模型中获得预测。

我遇到的问题是模型中的第一层采用[28, 28]的输入形状。当我使用tf.fromPixels()在NodeJS中创建张量时,我得到了一个形状为[28, 28, 1]的张量,然而,当我将其输入到模型预测函数中时,我从模型的第一个平坦层得到了一条错误消息。

检查时出错:预期flawn_input具有形状[null,28,28],但得到的数组具有形状[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;
});
}

我已经尝试将张量重塑为[28, 28],并尝试[null, 28, 28],然而,正如你可能想象的那样,我在使用null时会出现错误。那么,我的问题是如何将张量重塑为正确的形状?

从画布中获取图像后,需要重塑张量

var image = tf.fromPixels(canvas, 1);
image = img.reshape([1, 28, 28]);

然后你可以把张量传递给你的模型

最新更新