用于机器学习预测的请求正文中的 JSON 的 FastAPI 数组

问题描述 投票:0回答:1

我正在使用 FastAPI 在机器学习中进行模型推理,因此我需要将

JSON
数组作为输入,如下所示:

[
  {
    "Id":"value",
    "feature1":"value",
    "feature2":"value",
    "feature3":"value"
  },
  {
    "Id":"value",
    "feature1":"value",
    "feature2":"value",
    "feature3":"value"
  },
  {
    "Id":"value",
    "feature1":"value",
    "feature2":"value",
    "feature3":"value"
  }
]

输出(预测结果)应如下所示:

[
  {
    "Id":"value",
    "prediction":"value"
  },
  {
    "Id":"value",
    "prediction":"value"
  },
  {
    "Id":"value",
    "prediction":"value"
  }
]

如何在Python中使用FastAPI来实现这个?

python json machine-learning fastapi predict
1个回答
3
投票

您可以使用 Pydantic 模型让端点期待

JSON
请求正文,如此处所述(有关更多选项,请参阅此答案)。为此,创建一个具有所需参数的 Pydantic 模型(假设为
ItemIn
)(要定义可选参数,请参阅这个答案),并在端点中定义
List[ItemIn]
类型的参数,以便端点期望有
list
JSON
对象(在 Python 中,即
dict
对象),如here所述。以类似的方式,您可以定义一个响应模型(例如,下面示例中的
ItemOut
)。

示例

from pydantic import BaseModel
from typing import List

class ItemIn(BaseModel):
    Id: str
    feature1: str
    feature2: str
    feature3: str

class ItemOut(BaseModel):
    Id: str
    prediction: str
    
@app.post('/predict', response_model=List[ItemOut])
def predict(items: List[ItemIn]):
    return [{"Id":  "value", "prediction": "value"}, {"Id":  "value", "prediction": "value"}]

更新

您可以将数据发送到

predict()
函数并获取结果,如这个答案中所述。下面的例子:

@app.post('/predict', response_model=List[ItemOut])
def predict(items: List[ItemIn]):
    for item in items:
        pred = model.predict([[item.feature1, item.feature2, item.feature3]])[0] 

或者,使用以下内容,如此答案(选项 3)中所述,以避免循环遍历项目并多次调用 predict()

 函数

import pandas as pd @app.post('/predict', response_model=List[ItemOut]) def predict(items: List[ItemIn]): df = pd.DataFrame([i.dict() for i in items]) pred = model.predict(df)
    
© www.soinside.com 2019 - 2024. All rights reserved.