首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastAPI:返回ML模型预测时的内部服务器错误

FastAPI:返回ML模型预测时的内部服务器错误
EN

Stack Overflow用户
提问于 2022-06-25 13:24:32
回答 1查看 349关注 0票数 1

我想用FastAPI测试我的管道,但是我在代码中找不到错误。当我使用Visual代码(使用print()语句)测试它时,它可以工作。但是,当我尝试通过浏览器访问端点时,我得到了Internal Server Error。当我返回其他东西作为预测结果(例如,一些字符串),而不是实际的预测结果时,它可以工作。

这是我的代码:

代码语言:javascript
复制
class FraudDetection333(BaseModel):
    """
    Input features validation for the ML model
    """
    user_id: int
    signup_day: int
    signup_month: int
    signup_year: int
    purchase_day: int
    purchase_month: int
    purchase_year: int
    purchase_value: float
    source: str
    browser: str
    sex: str
    age: int

@api.post("/predictions_test",tags=['DecisionTreeClassifier'])
def predictions_test(fraud:FraudDetection333):
    """
    :param:input data from the post request
    :return predicted type
    """
    features = [[
    fraud.user_id,
    fraud.signup_day,
    fraud.signup_month,
    fraud.signup_year,
    fraud.purchase_day,
    fraud.purchase_month,
    fraud.purchase_year,
    fraud.purchase_value,
    fraud.source,
    fraud.browser,
    fraud.sex,
    fraud.age
    ]]
    rf_model = joblib.load('./rf_model.pkl')
    new = (pd.DataFrame(features, index = ['0'], columns = ['user_id','signup_day',         
'signup_month', 'signup_year', 
        'purchase_day', 'purchase_month', 'purchase_year','purchase_value',
        'source','browser','sex','age']))
    new_prediction = rf_model.predict(new)
    return {
        "Predicted transaction(1 - fraud, 0 - not fraud)": new_prediction
    }

如果我尝试以下操作(使用print()语句),它将输出预期的结果:

代码语言:javascript
复制
featuress={
  "user_id": 22058,
  "signup_day": 24,
  "signup_month": 2,
  "signup_year": 2015,
  "purchase_day": 18,
  "purchase_month": 4,
  "purchase_year": 2015,
  "purchase_value": 34,
  "source": "SEO",
  "browser": "Chrome",
  "sex": "M",
  "age": 39
}
rf_model = joblib.load('./rf_model.pkl')
new = (pd.DataFrame(featuress, index = ['0'], columns = ['user_id','signup_day',     
 'signup_month', 'signup_year', 
        'purchase_day', 'purchase_month', 'purchase_year','purchase_value',
        'source','browser','sex','age']))
new_prediction = rf_model.predict(new)
print(new)
print(new_prediction)

如果我输入return {"Predicted transaction(1 - fraud, 0 - not fraud)": 'Hi'},它也能工作。图像这里

EN

回答 1

Stack Overflow用户

发布于 2022-06-25 15:33:49

model.predict()函数返回一个numpy.ndarray (您可以使用print(type(new_prediction))验证这一点)。您不能只以这种格式返回它;因此,Internal Server Error

选项1只是简单地退出并返回numpy数组的第一个元素:

代码语言:javascript
复制
return {'prediction': new_prediction[0]}

选项2是使用.tolist()方法将numpy数组转换为.tolist()列表。

代码语言:javascript
复制
return {'prediction': new_prediction.tolist()}

相关的答案可以找到这里这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72754217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档