sklearn,keras,tensorflow 模型本地保存与导入

xiaoxiao2021-02-27  279


sklearn,keras,tensorflow模型本地保存与导入


sklearn的模型保存与导入

keras的模型保存与导入

模型的网络结构与权重的保存 模型的网络结构保存 模型的权重的保存 模型的导入

tensorflow的模型保存与导入

模型的保存与导入 计算图的保存与导入


数据集

训练集

import numpy as np import matplotlib.pyplot as plt from sklearn.externals import joblib from sklearn.linear_model import LinearRegression x=np.arange(10) y=x x=x.reshape(len(x),1) plt.plot(x,y,'r+',markersize=15,markeredgewidth=5) plt.show()

测试集

test_x=np.arange(20) test_x=test_x.reshape(len(test_x),1)

sklearn模型的保存与导入

sklearn模型的保存

Lr=LinearRegression() Lr.fit(x,y) joblib.dump(Lr,'./Lr.model')#保存

sklearn模型的导入

model=joblib.load('./Lr.model')#导入 y_test=model.predict(test_x) plt.plot(x,y,'r+',markersize=15,markeredgewidth=5) plt.plot(test_x,y_test) plt.show()

keras的模型保存与导入

模型的网络结构与权重的保存

from keras.layers import Dense from keras.models import Sequential from keras.metrics import MSE def getmodel(): model=Sequential() model.add(Dense(input_dim=1,output_dim=2,activation='linear')) model.add(Dense(output_dim=1,activation='linear')) return model model=getmodel() model.compile(optimizer='sgd',loss=MSE) model.fit(x,y,nb_epoch=20) model.save('./dnn.h5')#这个方法将网络结构与权重一起保存到dnn.h5中

模型的网络结构保存

model_json=model.to_json()#此方法将模型网络结构保存到json中 f=open('./knn_model.json',mode='w')#将json写到本地 f.write(model_json) f.close() model_yaml=model.to_yaml()#此方法将模型网络结构保存到yaml中 f=open('./knn_model.yaml',mode='w')#将yaml写到本地 f.write(model_yaml) f.close()

模型的权重的保存

model.save_weights('./dnn_weight.h5')#此方法将模型的权重保存到本地

模型的导入

方法1:

from keras.models import load_model dnn=load_model('./dnn.h5')#直接将模型全部导入 test_y=dnn.predict(test_x) plt.plot(x,y,'r+',markersize=15,markeredgewidth=5) plt.plot(test_x,test_y) plt.show()

方法2:

mlp=getmodel()#此函数为上面写的网络结构 mlp.load_weights('./dnn_weight.h5')#方法将权重导入到网络结构中 test_y=mlp.predict(test_x) plt.plot(x,y,'r+',markersize=15,markeredgewidth=5) plt.plot(test_x,test_y) plt.show()

方法3:

f=open('./knn_model.json',mode='r')#将json读入 model_json=f.read() f.close() from keras.models import model_from_json model_j=model_from_json(model_json)#从json中建立模型的网络结构 model_j.load_weights('./dnn_weight.h5')#方法将权重导入到网络结构中 test_y=model_j.predict(test_x) plt.plot(x,y,'r+',markersize=15,markeredgewidth=5) plt.plot(test_x,test_y) plt.show()

方法4:

#同理保存到yaml中 from keras.models import model_from_yaml f=open('./knn_model.yaml',mode='r') model_yaml=f.read() f.close() model_y=model_from_yaml(model_yaml) model_y.load_weights('./dnn_weight.h5') test_y=model_y.predict(test_x) plt.plot(x,y,'r+',markersize=15,markeredgewidth=5) plt.plot(test_x,test_y) plt.show()

tensorflow的模型保存与导入

模型的保存

import tensorflow as tf v1=tf.Variable(tf.constant(0),name='v1') v2=tf.Variable(tf.constant(1),name='v2') add=tf.add(v1,v2) print(add) saver=tf.train.Saver() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) saver.save(sess,'C:\\Users\\a\\Desktop\\g\\path\\data-all.chpt') print(sess.run(add))

通过saver.save函数将tensorflow模型保存到path中,文件目录下会出现多个文件。第一个文件data-all.chpt.meta,它保存了tensorflow计算图的结构。其中一个文件保存了程序中每一个变量的取值。

模型的导入

方法1: 先将图构建好,saver.restore函数将path里模型文件中的张量导入到相应的变量中

import tensorflow as tf v3=tf.Variable(tf.constant(0),name='v1') v4=tf.Variable(tf.constant(1),name='v2') add=tf.add(v3,v4) saver=tf.train.Saver({'v1':v3,'v2':v4}) with tf.Session() as sess: saver.restore(sess,'C:\\Users\\a\\Desktop\\g\\path\\data-all.chkp') print(sess.run(add))

方法2: data-all.chkp.meta为计算图文件,所以可以通过tf.train.import_meta_graph函数将图先引进, 然后通过saver.restore,将文件中的张量导入到相应的变量中

import tensorflow as tf saver=tf.train.import_meta_graph('C:\\Users\\a\\Desktop\\g\\path\\data-all.chkp.meta') with tf.Session() as sess: add=sess.graph.get_tensor_by_name('Add:0') saver.restore(sess,'C:\\Users\\a\\Desktop\\g\\path\\data-all.chkp') print(sess.run(add))

计算图的保存

方法1: 通过convert_variables_to_constants函数可以将计算图中的变量及其取值通过常量的方式保存,这个tensorflow计算图可以统一存放在一个文件中。

import tensorflow as tf from tensorflow.python.framework import graph_util v1=tf.Variable(tf.constant(1.0,shape=[1]),name="v1") v2=tf.Variable(tf.constant(2.0,shape=[1]),name="v2") result=v1+v2 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) graph_def=tf.get_default_graph().as_graph_def() output_graph_def=graph_util.convert_variables_to_constants(sess,graph_def,['add']) with tf.gfile.GFile("C:\\Users\\a\\Desktop\\g\\path\\pb_test1.pb","wb") as f: f.write(output_graph_def.SerializeToString()) f.close()

方法2: 通过tf.train.write_graph方法将图中的graph_def部分直接保存到路径里的文件中,我们只需要这一部分就可以完成从输入层到输出层的计算。

import tensorflow as tf graph=tf.Graph() with graph.as_default(): v1=tf.constant(0,name='v1') v2=tf.constant(1,name='v2') print(v1) add=tf.add(v1,v2) print(add) graph_def=graph.as_graph_def() sess=tf.Session() sess.run(tf.global_variables_initializer()) tf.train.write_graph(graph_def,"C:\\Users\\a\\Desktop\\g\\path\\",name="graph.pb",as_text=False) sess.close()

计算图的导入

import tensorflow as tf from tensorflow.python.platform import gfile path="C:\\Users\\a\\Desktop\g\\path\\pb_test1.pb" with tf.Graph().as_default(): output_graph_def = tf.GraphDef() with gfile.GFile(path,'rb') as f: output_graph_def.ParseFromString(f.read()) _ = tf.import_graph_def(output_graph_def,name='') with tf.Session() as sess: add=sess.graph.get_tensor_by_name("add:0") print(sess.run(add)) print(sess.run('v1:0'))
转载请注明原文地址: https://www.6miu.com/read-7304.html

最新回复(0)