Выполнение запроса Postman к REST API обслуживания Tensorflow для прогнозирования - PullRequest
1 голос
/ 02 ноября 2019

Windows 10 и Docker тензор потока / обслуживание. Возникла проблема с структурированием JSON для запроса прогноза и надежда, что кто-то может мне помочь.

Я пробовал разные форматы json, но ни один из них не был успешным.

Информация о модели, обслуживаемой Tensorflow Обслуживание:

http://localhost:8501/v1/models/my_model/metadata:

{
    "model_spec": {
        "name": "my_model",
        "signature_name": "",
        "version": "1"
    },
    "metadata": {
        "signature_def": {
            "signature_def": {
                "__saved_model_init_op": {
                    "inputs": {},
                    "outputs": {
                        "__saved_model_init_op": {
                            "dtype": "DT_INVALID",
                            "tensor_shape": {
                                "dim": [],
                                "unknown_rank": true
                            },
                            "name": "NoOp"
                        }
                    },
                    "method_name": ""
                },
                "serving_default": {
                    "inputs": {
                        "lstm_input": {
                            "dtype": "DT_FLOAT",
                            "tensor_shape": {
                                "dim": [
                                    {
                                        "size": "-1",
                                        "name": ""
                                    },
                                    {
                                        "size": "50",
                                        "name": ""
                                    },
                                    {
                                        "size": "5",
                                        "name": ""
                                    }
                                ],
                                "unknown_rank": false
                            },
                            "name": "serving_default_lstm_input:0"
                        },
                        "tech_input": {
                            "dtype": "DT_FLOAT",
                            "tensor_shape": {
                                "dim": [
                                    {
                                        "size": "-1",
                                        "name": ""
                                    },
                                    {
                                        "size": "1",
                                        "name": ""
                                    }
                                ],
                                "unknown_rank": false
                            },
                            "name": "serving_default_tech_input:0"
                        }
                    },
                    "outputs": {
                        "dense_out": {
                            "dtype": "DT_FLOAT",
                            "tensor_shape": {
                                "dim": [
                                    {
                                        "size": "-1",
                                        "name": ""
                                    },
                                    {
                                        "size": "1",
                                        "name": ""
                                    }
                                ],
                                "unknown_rank": false
                            },
                            "name": "StatefulPartitionedCall:0"
                        }
                    },
                    "method_name": "tensorflow/serving/predict"
                }
            }
        }
    }
}

Тело JSON, которое я считал правильным (но это не так) при отправке запроса:

{ 
   "inputs":{ 
      "lstm_input":[ 
         [ 
            0.178988,
            0.172787,
            0.182751,
            0.177997,
            0.138975
         ],
         .. ommitted, 50 in total ..
         [ 
            0.248429,
            0.244069,
            0.248119,
            0.245594,
            0.404607
         ]
      ],
      "tech_input":[ 
         [ 
            0.256009
         ]
      ]
   }
}

Я ожидал прогноз (float), вместо этого я получаю сообщение об ошибке:

{"error": "transpose expects a vector of size 2. But input(1) is a vector of size 3\n\t [[{{node model_3/lstm_0/transpose}}]]"}

1 Ответ

0 голосов
/ 04 ноября 2019

Теперь я получаю ожидаемый прогноз

Любое из двух изменений сделало трюк, возможно, первое.

  1. Добавлен дополнительный [], окружающий 50 элементов в lstm_input
{ 
   "inputs":{ 
      "lstm_input":[ 
         [ 
            [ 
               0.178988,
               0.172787,
               0.182751,
               0.177997,
               0.138975
            ],
            .. ommitted, 50 in total ..
            [ 
               0.248429,
               0.244069,
               0.248119,
               0.245594,
               0.404607
            ]
         ]
      ],
      "tech_input":[ 
         [ 
            0.256009
         ]
      ]
   }
}
Tensorflow 2.0, созданный SavedModel сразу после тренировки с model.save ('YourSavedModelName', save_format = 'tf'). В моей предыдущей (неудачной попытке) я сохранил модель как h5, перезагрузил ее, а затем сохранил как SavedModel

Надеюсь, эта информация может быть полезна и кому-то еще

...