簡體   English   中英

FastAPI:返回 ML 模型預測時出現內部服務器錯誤

[英]FastAPI: Internal Server Error when returning ML model prediction

我想在 FastAPI 中測試我的管道,但在我的代碼中找不到錯誤。 當我使用 Visual Studio Code(使用print()語句)對其進行測試時,它可以工作。 但是,當我嘗試通過瀏覽器訪問端點時,我得到Internal Server Error 當我返回其他東西作為預測結果(例如,一些字符串)而不是實際的預測結果時,它會起作用。

這是我的代碼:

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()語句),它會打印出預期的結果:

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'} ,它也有效。 圖片在這里

model.predict()函數返回一個numpy.ndarray (您可以使用print(type(new_prediction))進行驗證)。 您不能只以那種格式返回它; 因此, Internal Server Error

選項 1是簡單地退出並返回該 numpy 數組的第一個元素:

return {'prediction': new_prediction[0]}

選項 2是使用.tolist()方法將 numpy 數組轉換為 Python 列表。

return {'prediction': new_prediction.tolist()}

相關答案可以在這里這里找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM