[英]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.