keras的模型保存与导入
模型的网络结构与权重的保存 模型的网络结构保存 模型的权重的保存 模型的导入
tensorflow的模型保存与导入
模型的保存与导入 计算图的保存与导入
方法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()通过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()