我要做的是将使用tf.fromPixels()
创建的张量转换为[28, 28]
并将其转换为输入,然后从Python训练的模型中获取预测。
我遇到的麻烦是模型中的第一层,其输入形状为[28, 28]
。当我使用tf.fromPixels()
在NodeJS中创建一个张量时,我得到一个形状为[28, 28, 1]
的张量,但是,当我将其输入到模型预测函数中时,我会从模型的第一平坦层中得到一条错误消息
检查时出错:预期flatten_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时会出错。那么我的问题是如何将张量整形为正确的形状?
答案 0 :(得分:1)
从画布上获取图像后,您需要重塑张量
var image = tf.fromPixels(canvas, 1);
image = img.reshape([1, 28, 28]);
然后您可以将张量传递给模型