我正在尝试做的是将使用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/

10-13 05:51