使用Requests加载GitHub机器学习模型时出现AttributeError问题求助
GitHub模型下载与加载问题解决
错误原因
- 保存方式错误:
requests.get(url).content返回的是字节流,你用pickle.dump把字节流存成文件,后续pickle.load读取到的只是原始字节数据,不是训练好的模型对象,自然没有predict方法。 - 变量名拼写错误:代码里
pd.DataFrame(x)中的x未定义(应该是input_array);modell.predict中的modell是笔误,应为model。
修正后的代码
import requests import pickle import os from os.path import getcwd import numpy as np import pandas as pd # 下载模型文件 url = "https://github.com/MUmairAB/Stroke-Prediction-using-Machine-Learning/blob/main/trained_model.sav?raw=true" r = requests.get(url) # 直接将字节流写入文件,而非用pickle.dump with open(os.path.join(getcwd(), 'trained_model12.pkl'), 'wb') as f: f.write(r.content) # 加载模型 model = pickle.load(open(os.path.join(getcwd(), 'trained_model12.pkl'), 'rb')) # 准备输入数据并预测 input_array = np.array([[0,67,0,1,0,228.69,36.6], [0,58,1,0,0,87.96,39.2]]) input_df = pd.DataFrame(input_array) prediction = model.predict(input_df) print(prediction)
其他可行方案
方案1:使用urllib下载
和requests逻辑一致,换用urllib库实现:
import urllib.request import pickle import os from os.path import getcwd url = "https://github.com/MUmairAB/Stroke-Prediction-using-Machine-Learning/blob/main/trained_model.sav?raw=true" urllib.request.urlretrieve(url, os.path.join(getcwd(), 'trained_model12.pkl')) model = pickle.load(open(os.path.join(getcwd(), 'trained_model12.pkl'), 'rb'))
方案2:在.py文件中执行git clone
如果习惯用git clone,可通过subprocess模块在Python脚本中执行克隆命令:
import subprocess import pickle import os from os.path import getcwd repo_url = "https://github.com/MUmairAB/Stroke-Prediction-using-Machine-Learning.git" clone_path = os.path.join(getcwd(), 'stroke_model_repo') # 克隆仓库 subprocess.run(["git", "clone", repo_url, clone_path], check=True) # 加载模型 model_path = os.path.join(clone_path, 'trained_model.sav') model = pickle.load(open(model_path, 'rb'))
内容的提问来源于stack exchange,提问作者Umair Akram
相关产品推荐
相关产品推荐

