使用Joblib / Pickle保存的加载ML模型时出现问题

时间:2020-08-29 17:45:33

标签: python jupyter-notebook pickle statsmodels joblib

我使用.pynb将Jupyter笔记本.pickle文件保存为joblib.格式

我的ML模型是使用pandas,numpy和statsmodels python库构建的。

我将拟合模型保存到名为fitted_model的变量中,这就是我使用joblib的方式:

from sklearn.externals import joblib
# Save RL_Model to file in the current working directory

joblib_file = "joblib_RL_Model.pkl"  
joblib.dump(fitted_model, joblib_file)

我得到这个作为输出:

['joblib_RL_Model.pkl']

但是当我尝试从文件加载时,请在新的jupyter笔记本中使用:

# Load from file
joblib_file = "joblib_RL_Model.pkl"  
joblib_LR_model = joblib.load(joblib_file)
joblib_LR_model

我只能把这个找回来:

,没有模型。我期望在那里看到模型加载,并按照原始笔记本看到图形输出。

2 个答案:

答案 0 :(得分:2)

与open一起使用,会更好,因为它会自动打开和关闭文件。也可以使用适当的模式。

const path = require('path')
const express = require('express')
const mongoose = require('mongoose')
const dotenv = require('dotenv')
const morgan = require('morgan')
const exphbs = require('express-handlebars') 
const passport = require('passport')
const session = require('express-session')
const MongoStore = require('connect-mongo')(session)
const connectDB = require('./config/db')

//Load config
dotenv.config({path: './config/config.env' })

// Passport config
require('./config/passport')(passport)

connectDB()

const app = express()

//Body parser
app.use(express.urlencoded({ extended: false }))
app.use(express.json())

// Logging
if(process.env.NODE_ENV === 'development') {
    app.use(morgan('dev'))
}

// Handlebars Helpers
const { formatDate, stripTags, truncate, } = require('./helpers/hbs')

// Handlebars
app.engine('.hbs', exphbs({ 
    helpers: {
        formatDate,
        stripTags,
        truncate,
    },
    defaultLayout: 'main', 
    extname: '.hbs',
    })
)
app.set('view engine', '.hbs')

我在Colab中的实现是here。检查一下。

答案 1 :(得分:1)

您可以使用更具量化性的软件包,该软件包是python的pickle默认软件包,用于保存模型

您可以使用以下功能保存ML模型

import pickle

def save_model(model):
    pickle.dump(model, open("model.pkl", "wb"))

功能模板应该是

import pickle

def save_model(model):
    pickle.dump(model, open(PATH_AND_FILE_NAME_TO_BE_SAVED, "wb"))

要在从泡菜库中保存模型时加载模型,可以遵循以下功能

def load_model(path):
    return pickle.load(open(path, 'rb'))
  • 路径是将模型保存到的文件的路径和名称。

注意:

  • 这仅适用于基本ML模型和PyTorch模型,不适用于需要使用Tensorflow的模型
model.save(PATH_TO_MODEL_AND_NAME)

其中模型的类型为tensorflow.keras.models