我建立了一个情感分析模型,并试图使用fastAPI部署它。这是我的代码:
from fastapi import FastAPI
from pydantic import BaseModel
import pickle
import json
import numpy as np
app = FastAPI()
class ModelInput(BaseModel):
review: str
# Loading the saved model
sentiment_model = pickle.load(open('sentiment_analyzer_new.sav', 'rb'))
@app.post('/sentiment_prediction')
async def sentiment_pred(input_parameters: ModelInput):
rev = input_parameters.review
input_list = [rev]
# Reshape the input data to have a shape of (1, -1)
input_array = np.array(input_list).reshape(1, -1)
# Print for debugging
print("Review Text:", rev)
print("Input Array Shape:", input_array.shape)
predictions = sentiment_model.predict(input_array)
# Assuming 'predictions' is an array of predictions
if predictions[0] == 1:
sentiment = 'Positive'
else:
sentiment = 'Negative'
response = {
"Review": rev,
"Sentiment": sentiment
}
return response
但是当我用JSON测试 Postman 时,
{
"review": "This is a positive review."
},
我一直得到internal server error
,当我检查终端时,这是我得到的错误:
Traceback (most recent call last):
File "c:\users\user\anaconda3\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 408, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "c:\users\user\anaconda3\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__
return await self.app(scope, receive, send)
File "c:\users\user\anaconda3\lib\site-packages\fastapi\applications.py", line 289, in __call__
await super().__call__(scope, receive, send)
File "c:\users\user\anaconda3\lib\site-packages\starlette\applications.py", line 122, in __call__
await self.middleware_stack(scope, receive, send)
File "c:\users\user\anaconda3\lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
raise exc
File "c:\users\user\anaconda3\lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "c:\users\user\anaconda3\lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
raise exc
File "c:\users\user\anaconda3\lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "c:\users\user\anaconda3\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__
raise e
File "c:\users\user\anaconda3\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__
await self.app(scope, receive, send)
File "c:\users\user\anaconda3\lib\site-packages\starlette\routing.py", line 718, in __call__
await route.handle(scope, receive, send)
File "c:\users\user\anaconda3\lib\site-packages\starlette\routing.py", line 276, in handle
await self.app(scope, receive, send)
File "c:\users\user\anaconda3\lib\site-packages\starlette\routing.py", line 66, in app
response = await func(request)
File "c:\users\user\anaconda3\lib\site-packages\fastapi\routing.py", line 273, in app
raw_response = await run_endpoint_function(
File "c:\users\user\anaconda3\lib\site-packages\fastapi\routing.py", line 190, in run_endpoint_function
return await dependant.call(**values)
File "C:\Users\USER\Desktop\Sentiment analysis\api.py", line 28, in sentiment_pred
predictions = sentiment_model.predict(input_array)
File "c:\users\user\anaconda3\lib\site-packages\sklearn\linear_model\_base.py", line 307, in predict
scores = self.decision_function(X)
File "c:\users\user\anaconda3\lib\site-packages\sklearn\linear_model\_base.py", line 286, in decision_function
raise ValueError("X has %d features per sample; expecting %d"
ValueError: X has 1 features per sample; expecting 6209089
请问,我做错了什么,我该如何解决?
起初,我得到一个错误,以调整大小,我与input_array = np.array(input_list).reshape(1, -1)
但现在,我得到了一个新的错误。
我只是希望能够成功地测试API与 Postman ,而不是得到一个错误。
非常感谢.
1条答案
按热度按时间fcwjkofz1#
你应该读一下:ValueError: X has 29 features per sample; expecting 84
您的输入似乎没有模型所期望的格式。打印它可能会帮助你了解它目前的形状。
从我们所看到的,你的输入是一个字符串“类ModelInput(BaseModel):评论:str”
那么input_list是一个字符串“input_list = [rev]”的列表
然后将列表整形为字符串列表。这很可能不是你想要的。