我正在尝试做的是将使用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时会出现错误。那么我的问题是如何将张量整形为正确的形状? 最佳答案
从画布上获取图像后,您需要重塑张量
var image = tf.fromPixels(canvas, 1);
image = img.reshape([1, 28, 28]);
然后可以将张量传递给模型
关于node.js - 无法转换由tf.fromPixels()创建的张量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51545231/