【问题标题】:Nodejs Tensorflow Serving Client Error 3Nodejs TensorFlow 服务客户端错误 3
【发布时间】:2017-11-18 02:33:21
【问题描述】:

我正在提供一个预先训练的初始模型,并且我一直按照官方教程提供它直到现在。我目前收到错误代码 3,如下:

{ Error: contents must be scalar, got shape [305]
  [[Node: map/while/DecodeJpeg = DecodeJpeg[_output_shapes=[[?,?,3]], acceptable_fraction=1, channels=3, dct_method="", fancy_upscaling=true, ratio=1, try_recover_truncated=false, _device="/job:localhost/replica:0/task:0/device:CPU:0"](map/while/TensorArrayReadV3)]]
  at /server/node_modules/grpc/src/client.js:554:15 code: 3, metadata: Metadata { _internal_repr: {} } }

我正在使用来自 Tensorflow Serving 的 API 的 prediction_service.proto。这是我定义函数的 Nodejs 文件:

const PROTO_PATH = "./pb/prediction_service.proto";
const TensorflowServing = grpc.load(PROTO_PATH).tensorflow.serving;

const testClient = new TensorflowServing.PredictionService(
    TF_TEST, grpc.credentials.createInsecure()
);

function getTestModelMsg(val){
    return {
        model_spec: { name: "inception", signature_name: "predict_images", version: 1},
        inputs: {
            images: {
                dtype: "DT_STRING",
                tensor_shape: {
                    dim: [{size: 220}, {size: 305}],
                    unknown_rank: false
                },
                string_val: val
            }
        }
    }
}


function predictTest(array, callback) {
    testClient.predict(getTestModelMsg(array), (error, response) => {
        if(error)
            return callback(error);

    callback(null, response.outputs)
})}

我将图像作为二进制图像传递如下:

fs.readFile('./test/Xiang_Xiang_panda.jpg', (err, data) => {
    if(err) {
        return res.json({message: "Not found"});
    }

    predictTest( data.toString('binary') , (error, outputs) => {
        if (error) {
            console.error(error);
            return res.status(500).json({ error });
        }
        res.status(200).json({ outputs });
    })
})

我已经被困了一段时间,所以如果有人能在这里帮助我,我将不胜感激!任何帮助都会很棒! 提前致谢! :)

【问题讨论】:

    标签: node.js tensorflow tensorflow-serving


    【解决方案1】:

    好的,所以我终于设法破解了这个。在这里发布它作为答案,以防有人遇到同样的问题。

    所以 inception 模型需要一个 base64 编码的图像:

    fs.readFile('./test/Xiang_Xiang_panda.jpg', (err, data) => {
        if(err) {
            return res.json({message: "Not found"});
        }
    
        predictTest( data.toString('base64') , (error, outputs) => {
            if (error) {
                console.error(error);
                return res.status(500).json({ error });
            }
            res.status(200).json({ outputs });
        })
    })
    

    然后查看来自 Tensorflow Serving 的 inception_client.py,我发现张量实际上有 shape=[1]。所以这使得 getTestModelMsg 为:

    function getTestModelMsg(val){
    return {
        model_spec: { name: "inception", signature_name: "serving_default", version: 1},
        inputs: {
            images: {
                dtype: "DT_STRING",
                tensor_shape: {
                    dim: [{size: 1}],
                    unknown_rank: false
                },
                string_val: val
            }
        }
    }
    

    希望对某人有所帮助。祝你好运。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-11
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2013-01-19
      • 1970-01-01
      相关资源
      最近更新 更多