如何将训练好的模型迁移至其他Python Notebook用于测试?
提交含训练后模型的测试Notebook操作方案
一、先持久化训练好的模型与预处理逻辑
Notebook里的模型和pre_process函数都是内存对象,关闭会话后就会丢失,必须先保存到本地文件:
- 模型保存:根据你使用的框架选择对应方法:
- Scikit-learn:用
joblib或pickle,示例代码:joblib.dump(trained_model, 'trained_model.joblib') - TensorFlow/Keras:
trained_model.save('saved_model_dir/')(会生成一个包含模型结构和权重的文件夹) - PyTorch:
torch.save(trained_model.state_dict(), 'model_weights.pth')(仅保存权重,后续加载时需要先初始化模型结构)
- Scikit-learn:用
- 预处理函数/对象保存:
- 如果是Scikit-learn的预处理对象(如
StandardScaler),同样用joblib.dump(preprocessor, 'preprocessor.joblib') - 如果是自定义的
pre_process函数,要么直接把函数代码复制到测试Notebook里,要么用pickle保存:pickle.dump(pre_process, open('pre_process.pkl', 'wb'))(注意函数不能依赖未定义的外部变量)
- 如果是Scikit-learn的预处理对象(如
二、准备测试Notebook并提交
- 在测试Notebook中加载保存的资源,编写测试逻辑:
以Scikit-learn为例的示例代码:import joblib # 加载预处理对象/函数 pre_process = joblib.load('preprocessor.joblib') # 加载训练好的模型 trained_model = joblib.load('trained_model.joblib') # 执行测试流程 test_data = ... # 你的测试数据集 processed_data = pre_process(test_data) predictions = trained_model.predict(processed_data) - 提交内容:将测试Notebook + 保存的模型文件 + 预处理相关文件(如果是单独文件)打包提交。如果预处理函数代码简短,也可以直接把函数定义写在测试Notebook里,只提交Notebook和模型文件即可。
关于关联两个Notebook调用模型的问题
Notebook运行时的变量仅存在于当前会话,关闭后就会释放,无法直接跨文件共享内存中的模型。但可以通过以下方式实现关联调用:
- 推荐方案:按上述方法把训练好的模型保存到文件,在测试Notebook里加载文件中的模型,这是最稳定可靠的方式。
- 临时不推荐方案:用IPython魔法命令
%run在测试Notebook里运行训练Notebook的全部或部分代码,比如%run ./training_notebook.ipynb,但这样会重新执行训练流程,不仅耗时,还依赖训练数据和环境,一旦训练数据缺失就会报错。 - 规范方案:把预处理函数、模型结构定义等逻辑提取到一个单独的
.py模块(比如model_utils.py),训练Notebook和测试Notebook都导入这个模块。训练时保存模型,测试时从模块导入预处理函数并加载模型文件。
内容的提问来源于stack exchange,提问作者Karim Khalil
相关产品推荐
相关产品推荐

