postman ValueError:X每个样本有1个特征;我的情绪分析API在uvicorn上期望6209089

z5btuh9x  于 2023-10-18  发布在  Postman
关注(0)|答案(1)|浏览(151)

我建立了一个情感分析模型,并试图使用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 ,而不是得到一个错误。
非常感谢.

fcwjkofz

fcwjkofz1#

你应该读一下:ValueError: X has 29 features per sample; expecting 84
您的输入似乎没有模型所期望的格式。打印它可能会帮助你了解它目前的形状。
从我们所看到的,你的输入是一个字符串“类ModelInput(BaseModel):评论:str”
那么input_list是一个字符串“input_list = [rev]”的列表
然后将列表整形为字符串列表。这很可能不是你想要的。

相关问题