转换tf.fromPixels()创建的张量时遇到麻烦

时间:2018-07-26 18:17:05

标签: node.js tensorflow tensorflow.js

我要做的是将使用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时会出错。那么我的问题是如何将张量整形为正确的形状?

1 个答案:

答案 0 :(得分:1)

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

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

然后您可以将张量传递给模型