python保存训练模型,提取并使用训练模型

存储模型

训练好的模型可以进行存储,下次有测试数据就可以直接使用了

pickle方法

from sklearn import svm
from sklearn import datasets

clf = svm.SVC()
iris = datasets.load_iris()
X,y = iris.data,iris.target
clf.fit(X,y)

#保存
#method 1:pickle
import pickle
with open('D:/python/workspace/clf.pickle','wb')as f: #python路径要用反斜杠
    pickle.dump(clf,f) #将模型dump进f里面

这个时候在路径下面就会有一个.pickle的文件,存储的就是训练好的clf模型

提取模型的时候:

import pickle
from sklearn import datasets

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

with open('D:/python/workspace/clf.pickle','rb') as f:
    clf2 = pickle.load(f)#从f文件中提取出模型赋给clf2
    print(clf2.predict(X))

输出预测值,说明原来的模型已经被提取出来了
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]

joblib方法

from sklearn import svm
from sklearn import datasets

clf = svm.SVC()
iris = datasets.load_iris()
X,y = iris.data,iris.target
clf.fit(X,y)

#保存
#method 2:joblib
from sklearn.externals import joblib #joblib是sklearn的一个外部模块
joblib.dump(clf,'D:/python/workspace/clf.pkl') #将clf存入.pkl的文件中

在这里插入图片描述
提取模型的时候:

from sklearn.externals import joblib
from sklearn import datasets


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


clf3 = joblib.load('D:/python/workspace/clf.pkl')
print(clf3.predict(X))

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]模型已提取并已经可以用于预测分类

在处理大量数据的时候joblib的窗户里速度会比pickle更加快一点

对于神经网络训练的模型
拿个例子说:

from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential() #建立模型
model.add(Dense(input_dim = 6,output_dim = 12))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim = 12,output_dim = 1))
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型
model.fit(x_train, y_train, nb_epoch = 10000, batch_size = 16) #训练模型,学习一万次

这个例子训练的时候迭代了10000次,非常耗时,要存储起来,做预测的时候直接使用:
method1:储存训练参数weights

model.save_weights('1-net.model') #保存模型参数

调用的时候,由于只储存了参数,所以要将结构告诉给python:

model = Sequential() #建立模型
model.add(Dense(input_dim = 6,output_dim = 12))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim = 12,output_dim = 1))
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型

model.load_weights('1-net.model')

后面就可以直接用model.predict(x)

method2:储存全部整个模型

from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential() #建立模型
model.add(Dense(input_dim = 6,output_dim = 12))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim = 12,output_dim = 1))
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型
model.fit(x_train, y_train, nb_epoch = 10000, batch_size = 16) #训练模型,学习一万次

model.save('my_net.model')

调用的时候

from keras.models import load_model
model = load_model('my_net.model')

你可能感兴趣的:(python)