无法在Azure Function Python3中添加ML模型

问题描述

我正在尝试创建一个Azure函数,该函数将从我的ML模型(final_model.sav)返回数据。 这样一来,ML模型就可以在互联网上使用了。

我的Azure函数 init .py)程序:

import azure.functions as func
import pickle


def main(req: func.HttpRequest) -> func.HttpResponse:
    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        
        var=name
        load_model = pickle.load(open('final_model.sav','rb'))
        prediction = load_model.predict([var])
        prob = load_model.predict_proba([var])
        
        return func.HttpResponse(f"{prediction[0]}&{prob[0][1]}.")
        
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",status_code=200
        )

但是,每当我尝试通过HTTP端点(“ http:// localhost:7071 / api / News?name = HelloWorld”)触发此功能时,都会出现错误500。 我在requirements.txt中包含了“ sklearn”软件包。

我遇到此错误

Exception: FileNotFoundError: [Errno 2] No such file or directory: 'final_model.sav'

Error

但是我在同一目录中有final_model.sav文件。我不知道为什么它没有检测到它。

当我尝试调试代码时,我知道我的程序在遇到load_model = pickle.load(open('final_model.sav','rb'))行程序时会停止工作。 我已经将“ final_model.sav”放置在函数的目录中( init .py所在的位置)。

Function中的文件如下:

Files In azure Function

prediction.py只是一个无用的文件。请忽略它。它并没有得出有关该程序的任何结论。

我认为绑定中可能存在问题。请检查我的function.json文件

function.json:

{
  "scriptFile": "__init__.py","bindings": [
    {
      "authLevel": "anonymous","type": "httpTrigger","direction": "in","name": "req","methods": [
        "get","post"
      ]
    },{
      "type": "http","direction": "out","name": "$return"
    }
  ]
}

感谢您为解决我的问题付出宝贵的时间。 非常感谢。

解决方法

由于您正在使用open('final_model.sav','rb')从根路径加载文件,因此它将在功能应用程序的主目录中进行查找。因此,将“ final_model.sav”移到该位置,即移至“ host.json”所在的级别。