输入输出导入导出问题

本文详细介绍了多种机器学习模型的保存与加载方法,包括使用pickle、joblib、avro等工具,涵盖了SVM、LightGBM、CatBoost、Keras等模型的保存实践,以及在不同环境下模型加载可能遇到的问题及解决策略。

20220308

def data_save(path, model, model_name):
    '''
    模型保存
    :param path: 模型保存路径
    :param model: 保存模型
    :param model_name: 模型名称
    :return: 无
    '''
    # 编码模型保存
    with open(path + model_name + ".pickle", "wb") as fr:
        pickle.dump(model, fr)


def data_load(path, model_name):
    '''
    模型加载
    :param path: 模型路径
    :param model_name: 模型名称
    :return: 返回加载后的模型
    '''
    # 编码模型加载
    with open(path + model_name + ".pickle", "rb") as fw:
        encoder_model = pickle.load(fw)
        return encoder_model

字典就通过pickle保存就好了,pickle可以保存任何形式

20211203

Python3报错:TypeError: can't pickle _thread.RLock objects
 tfidf_model = TfidfVectorizer(
        tokenizer= None,
        analyzer = 'word',
        max_df=10000,
        min_df=0,
        smooth_idf=True,
        norm="l2",
        binary=False,
        stop_words=stopwords,
    ).fit(idf_filter)
    model_save(PATH + "model/",tfidf_model,config["model_name"])
tokenizer 如果是传入一个函数比如jieba.cut_for_search
pickle保存会报上面的错误,只有令tokenizer =None才能保存

20210610

保存文件
check point
pickle

20210531

import os
import yaml
from pathlib import Path
 CONFIG_PATH = os.path.join(os.path.abspath(str(Path('.').absolute())), 'config.yml')
 当前路径获取
   CONFIG = yaml.load(open(CONFIG_PATH), Loader=yaml.FullLoader)
   yaml 读取数据


20210413

https://blog.youkuaiyun.com/suiyueruge1314/article/details/88747916
字典的保存

20210121

import avro.schema
from avro.datafile import DataFileReader,DataFileWriter
from avro.io import DatumReader,DatumWriter
reader = DataFileReader(open(r"D:\code12temp\rongxiang\shd_product\data\testset.avro",'rb'),DatumReader())

for line in reader:
    with open('./data/testset.txt','a',encoding='utf-8') as f:
        f.write(str(line['id'])+'\t'+str(line['a'])+'\t'+str(line['b'])+'\t'+str(line['labels'])+'\n')
reader.close()

avro读取

20201221
在这里插入图片描述
lightgbm输入格式 都是ndarray

#lightgbm模型保存
with open(path+'/'+str(bclx)+'/lgbm.pickle', 'wb') as fr:
      pickle.dump(clf_multilabel,fr)
      
    # lightgbm模型加载
    with open(path + '/'+str(bclx)+'/lgbm.pickle', 'rb') as fw:
        lgbm=pickle.load(fw)

在这里插入图片描述

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer(classes = [‘光伏电站发电’, ‘光伏电站’, ‘光伏组件’, ‘光伏电站工程’, ‘光伏应用系统’, ‘光伏硅片’])
zh=mlb.fit_transform([(‘光伏电站发电’, ‘光伏电站’), (‘光伏组件’,),(‘光伏电站工程’,)])

多标签输入处理格式
输入的只有标签
# 训练分类器
KerasClassifier 的输入输出

estimator = KerasClassifier(build_fn=baseline_model, epochs=1, batch_size=1, verbose=1)
estimator.fit(x_train, y_train)


model_json = estimator.model.to_json()
with open(path+"jj_model.json", 'w')as json_file:
    json_file.write(model_json)  # 权重不在json中,只保存网络结构
estimator.model.save_weights(path+'jj_model.h5')

# 加载模型用做预测
json_file = open(path+"jj_model.json", "r")
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
loaded_model.load_weights(path+"jj_model.h5")

一维卷积分类 多分类 标签的输入格式的是one-hot

20201216
机器学习模型保存

下面的保存方式只适合catboost?
from sklearn.datasets import load_iris
from catboost import CatBoostClassifier

iris = load_iris()
cat_clf = CatBoostClassifier(iterations=100)
cat_clf.fit(iris.data, iris.target)   
以python代码格式保存模型文件
 cat_clf.save_model('catboost_model_file.py', format="python", export_parameters=None)
也可以保存以C++代码格式保存模型文件
cat_clf.save_model(‘catboost_model_file.cpp’, format=“cpp”, export_parameters=None)
直接查看保存到的python代码,部分信息如下

20201215
遇到pickle load 的时候 会报某些包不存在的错
很有可能是因为 模型保存和加载的时候分属于两台不一样的机子
环境不一样 只要在新的机子上 重新跑一下模型 重新保存一下就可以了

20201214

1500多列 34万行的数据 保存成csv 用了 8分钟 5.57GB
保存成 npy 11分钟 4.44GB
20201211

sql读出来的数据部分数据转换能成功但是全部转换不成功 说明里面有部分值是空或者其他
异常
从数据库读出的二进制文件存成csv到磁盘
读出来再转换成数值的时候会报错 而不写入磁盘前是可以转换的
那就用numpy保存好了

20201210

pickle文件可以用linux cat 查看

20201204

import pickle 
from sklearn.externals import joblib
from sklearn.svm import SVC
from sklearn import datasets

#定义一个分类器
svm = SVC()

iris = datasets.load_iris()
X = iris.data
y = iris.target

#训练模型
svm.fit(X,y)

#1.保存成Python支持的文件格式Pickle
#在当前目录下可以看到svm.pickle
with open('svm.pickle','wb') as fw:
    pickle.dump(svm,fw)
#加载svm.pickle
with open('svm.pickle','rb') as fr:
    new_svm1 = pickle.load(fr)

# print (new_svm1.predict(X[0:1]))

#2.保存成sklearn自带的文件格式Joblib
joblib.dump(svm,'svm.pkl')
#加载svm.pkl
new_svm2 = joblib.load('svm.pkl')
print (new_svm2.predict(X[0:1]))

sklearn 模型保存
https://www.cnblogs.com/ywjfx/p/11152696.html

tensorflow 是 avro 格式

import numpy as np
arr=[1,2,3,4,5]
np.save(‘test’,arr)# 将数组以二进制格式保存到磁盘
#读取(读取出来会是保存时候的原格式吗?)
print(np.load(‘test.npy’))#[1 2 3 4 5]

npy文件
20200605

运行加载模型的时候会出现
模型有些参数没有 有些参数为多余
表明初始化的模型参数和加载进的模型二者的参数是不一致的
改成一致就好了

https://blog.youkuaiyun.com/weixin_38859557/article/details/84633185

_pickle.UnpicklingError: invalid load key, ‘H’.

两个文件由两种不同的模型生成

Python3:EOFError: Ran out of input
导入的文件为空

No such file or directory: ‘THUCNews/saved_dict/bert.ckpt’
没有这个路径 或者没有这个文件

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值