如何解决导入pickle文件时的错误?

我正在尝试按照这个教程制作一个交通标志分类代码。我已经训练了模型,但在尝试将pickle文件(训练好的模型)导入到代码中时,在model=pickle.load(hel)(第21行)处遇到了错误,我该如何解决这个问题?

注意:我已经安装了tensorflow和pickle。

控制台消息

2022-03-19 11:53:44.525832: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cudart64_110.dll'; dlerror: 未找到cudart64_110.dll2022-03-19 11:53:44.533297: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] 如果您的机器上没有设置GPU,请忽略上述cudart dlerror。2022-03-19 11:53:54.072135: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cudart64_110.dll'; dlerror: 未找到cudart64_110.dll2022-03-19 11:53:54.084145: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cublas64_11.dll'; dlerror: 未找到cublas64_11.dll2022-03-19 11:53:54.099108: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cublasLt64_11.dll'; dlerror: 未找到cublasLt64_11.dll2022-03-19 11:53:54.110572: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cufft64_10.dll'; dlerror: 未找到cufft64_10.dll2022-03-19 11:53:54.120208: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'curand64_10.dll'; dlerror: 未找到curand64_10.dll2022-03-19 11:53:54.130490: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cusolver64_11.dll'; dlerror: 未找到cusolver64_11.dll2022-03-19 11:53:54.140943: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cusparse64_11.dll'; dlerror: 未找到cusparse64_11.dll2022-03-19 11:53:54.150708: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] 无法加载动态库 'cudnn64_8.dll'; dlerror: 未找到cudnn64_8.dll2022-03-19 11:53:54.157514: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1850] 无法打开一些GPU库。如果您想使用GPU,请确保上述提到的缺失库已正确安装。请按照https://www.tensorflow.org/install/gpu上的指南下载并设置您平台所需的库。跳过注册GPU设备...2022-03-19 11:53:54.175013: I tensorflow/core/platform/cpu_feature_guard.cc:151] 此TensorFlow二进制文件已使用oneAPI Deep Neural Network Library (oneDNN)优化,以在性能关键操作中使用以下CPU指令:AVX AVX2要在其他操作中启用它们,请使用适当的编译器标志重新构建TensorFlow。

错误消息

代码:

import numpy as npimport cv2import pickle frameWidth= 640        frameHeight = 480brightness = 180threshold = 0.90       font = cv2.FONT_HERSHEY_SIMPLEXcap = cv2.VideoCapture(0)cap.set(3, frameWidth)cap.set(4, frameHeight)cap.set(10, brightness)# 导入训练好的模型hel=open("model_trained.p","rb")  ## rb = 以字节读取模式model=pickle.load(hel) def grayscale(img):    img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    return imgdef equalize(img):    img =cv2.equalizeHist(img)    return imgdef preprocessing(img):    img = grayscale(img)    img = equalize(img)    img = img/255    return imgdef getCalssName(classNo):    if   classNo == 0: return '限速20公里/小时'    elif classNo == 1: return '限速30公里/小时'    elif classNo == 2: return '限速50公里/小时'    elif classNo == 3: return '限速60公里/小时'    elif classNo == 4: return '限速70公里/小时'    elif classNo == 5: return '限速80公里/小时'    elif classNo == 6: return '结束限速80公里/小时'    elif classNo == 7: return '限速100公里/小时'    elif classNo == 8: return '限速120公里/小时'    elif classNo == 9: return '禁止超车'    elif classNo == 10: return '禁止3.5吨以上车辆超车'    elif classNo == 11: return '下一交叉路口让行'    elif classNo == 12: return '优先道路'    elif classNo == 13: return '让行'    elif classNo == 14: return '停止'    elif classNo == 15: return '禁止车辆通行'    elif classNo == 16: return '禁止3.5吨以上车辆通行'    elif classNo == 17: return '禁止进入'    elif classNo == 18: return '一般警告'    elif classNo == 19: return '左侧危险弯道'    elif classNo == 20: return '右侧危险弯道'    elif classNo == 21: return '双弯道'    elif classNo == 22: return '颠簸路面'    elif classNo == 23: return '湿滑路面'    elif classNo == 24: return '右侧道路变窄'    elif classNo == 25: return '道路施工'    elif classNo == 26: return '交通信号灯'    elif classNo == 27: return '行人'    elif classNo == 28: return '儿童过马路'    elif classNo == 29: return '自行车过马路'    elif classNo == 30: return '小心冰雪'    elif classNo == 31: return '野生动物过马路'    elif classNo == 32: return '结束所有限速和超车限制'    elif classNo == 33: return '前方右转'    elif classNo == 34: return '前方左转'    elif classNo == 35: return '直行'    elif classNo == 36: return '直行或右转'    elif classNo == 37: return '直行或左转'    elif classNo == 38: return '靠右行驶'    elif classNo == 39: return '靠左行驶'    elif classNo == 40: return '必须进入环岛'    elif classNo == 41: return '结束禁止超车'    elif classNo == 42: return '结束禁止3.5吨以上车辆超车' while True:    success, imgOrignal = cap.read()     img = np.asarray(imgOrignal)    img = cv2.resize(img, (32, 32))    img = preprocessing(img)    cv2.imshow("Processed Image", img)    img = img.reshape(1, 32, 32, 1)    cv2.putText(imgOrignal, "类别: " , (20, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)    cv2.putText(imgOrignal, "概率: ", (20, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)    predictions = model.predict(img)    classIndex = model.predict_classes(img)    probabilityValue =np.amax(predictions)    if probabilityValue > threshold:    #print(getCalssName(classIndex))        cv2.putText(imgOrignal,str(classIndex)+" "+str(getCalssName(classIndex)), (120, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)        cv2.putText(imgOrignal, str(round(probabilityValue*100,2) )+"%", (180, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)        cv2.imshow("结果", imgOrignal)     if cv2.waitKey(1) and 0xFF == ord('q'):        break

回答:

您需要安装兼容的cuda和cudnn版本。请参考这个来了解构建配置。

或者

如果您在使用GPU,以下代码可以抑制警告。

# 这只是禁用警告,并不利用AVX来加速运行import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

如果您使用的是Unix系统,尝试通过设置export TF_CPP_MIN_LOG_LEVEL=3来禁用这些警告。谢谢!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注