模型的保存和读取

1.tensorflow保存和读取模型:tf.train.Saver()     .save()
#保存模型需要用到save函数 save( sess, save_path, global_step=None, latest_filename=None,
meta_graph_suffix='meta', write_meta_graph=True, write_state=True ) ''' sess:
保存模型要求必须有一个加载了计算图的会话,而且所有变量必须已被初始化。 save_path: 模型保存路径及保存名称 global_step:
如果提供的话,这个数字会添加到save_path后面,用于区分不同训练阶段的结果 ''' #例子 import tensorflow as tf import
numpy as np import os #用numpy产生数据 x_data = np.linspace(-1,1,300)[:, np.newaxis]
#转置 noise = np.random.normal(0,0.05, x_data.shape) y_data =
np.square(x_data)-0.5+noise #输入层 x_ph = tf.placeholder(tf.float32, [None, 1])
y_ph = tf.placeholder(tf.float32, [None, 1]) #隐藏层 w1 =
tf.Variable(tf.random_normal([1,10])) b1 = tf.Variable(tf.zeros([1,10])+0.1)
wx_plus_b1 = tf.matmul(x_ph, w1) + b1 hidden = tf.nn.relu(wx_plus_b1) #输出层 w2 =
tf.Variable(tf.random_normal([10,1])) b2 = tf.Variable(tf.zeros([1,1])+0.1)
wx_plus_b2 = tf.matmul(hidden, w2) + b2 y = wx_plus_b2 #损失 loss =
tf.reduce_mean(tf.reduce_sum(tf.square(y_ph-y),reduction_indices=[1])) train_op
= tf.train.GradientDescentOptimizer(0.1).minimize(loss) #保存模型对象saver saver =
tf.train.Saver() #判断模型保存路径是否存在,不存在就创建 if not os.path.exists('tmp/'):
os.mkdir('tmp/') #初始化 with tf.Session() as sess: if
os.path.exists('tmp/checkpoint'): #判断模型是否存在 saver.restore(sess,
'tmp/model.ckpt') #存在就从模型中恢复变量 else: init = tf.global_variables_initializer()
#不存在就初始化变量 sess.run(init) for i in range(1000): _,loss_value =
sess.run([train_op,loss], feed_dict={x_ph:x_data, y_ph:y_data}) if(i%50==0):
save_path = saver.save(sess, 'tmp/model.ckpt') print("迭代次数:%d , 训练损失:%s"%(i,
loss_value))
 

每调用一次保存操作会创建后3个数据文件并创建一个检查点(checkpoint)文件,简单理解就是权重等参数被保存到 .chkp.data
文件中,以字典的形式;图和元数据被保存到 .chkp.meta 文件中,可以被 tf.train.import_meta_graph 加载到当前默认的图。

2.keras保存和读取模型

* model.save(filepath),同时保存model和权重的 import numpy as np from keras.datasets
import mnist from keras.utils import np_utils from keras.models import
Sequential from keras.layers import Dense from keras.optimizers import SGD #
载入数据 (x_train,y_train),(x_test,y_test) = mnist.load_data() # (60000,28,28)
print('x_shape:',x_train.shape) # (60000) print('y_shape:',y_train.shape) #
(60000,28,28)->(60000,784) x_train = x_train.reshape(x_train.shape[0],-1)/255.0
x_test = x_test.reshape(x_test.shape[0],-1)/255.0 # 换one hot格式 y_train =
np_utils.to_categorical(y_train,num_classes=10) y_test =
np_utils.to_categorical(y_test,num_classes=10) # 创建模型,输入784个神经元,输出10个神经元 model
= Sequential([
Dense(units=10,input_dim=784,bias_initializer='one',activation='softmax') ]) #
定义优化器 sgd = SGD(lr=0.2) # 定义优化器,loss function,训练过程中计算准确率 model.compile(
optimizer = sgd, loss = 'mse', metrics=['accuracy'], ) # 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=5) # 评估模型 loss,accuracy =
model.evaluate(x_test,y_test) print('\ntest loss',loss)
print('accuracy',accuracy) # 保存模型 model.save('model.h5') #载入初次训练的模型再训练 mport
numpy as np from keras.datasets import mnist from keras.utils import np_utils
from keras.models import Sequential from keras.layers import Dense from
keras.optimizers import SGD from keras.models import load_model # 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data() # (60000,28,28)
print('x_shape:',x_train.shape) # (60000) print('y_shape:',y_train.shape) #
(60000,28,28)->(60000,784) x_train = x_train.reshape(x_train.shape[0],-1)/255.0
x_test = x_test.reshape(x_test.shape[0],-1)/255.0 # 换one hot格式 y_train =
np_utils.to_categorical(y_train,num_classes=10) y_test =
np_utils.to_categorical(y_test,num_classes=10) # 载入模型 model =
load_model('model.h5') # 评估模型 loss,accuracy = model.evaluate(x_test,y_test)
print('\ntest loss',loss) print('accuracy',accuracy) # 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=2) # 评估模型 loss,accuracy =
model.evaluate(x_test,y_test) print('\ntest loss',loss)
print('accuracy',accuracy) # 保存参数,载入参数
model.save_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5') # 保存网络结构,载入网络结构 from keras.models
import model_from_json json_string = model.to_json() model =
model_from_json(json_string) print(json_string)
* 通过创建ModelCheckpoint类的实例来设置检查点 from __future__ import print_function import
numpy as np from keras.models import Sequential from keras.layers.core import
Dense, Activation from keras.optimizers import SGD from keras.utils import
np_utils from keras.callbacks import ModelCheckpoint # 随机数种子,重复性设置
np.random.seed(1671) # 网络结构和训练的参数 NB_EPOCH = 40 BATCH_SIZE = 128 VERBOSE = 1
NB_CLASSES = 10 OPTIMIZER = SGD() N_HIDDEN = 128 VALIDATION_SPLIT = 0.2
RESHAPED = 784 # 加载数据 def load_data(path="mnist.npz"): f = np.load(path)
x_train, y_train = f['x_train'], f['y_train'] x_test, y_test = f['x_test'],
f['y_test'] f.close() return (x_train, y_train), (x_test, y_test) # 调用函数加载数据
(x_train, y_train), (x_test, y_test) = load_data() # 数据预处理 (x_train, y_train),
(x_test, y_test) = load_data() # 数据变形、类型转换及归一化 x_train = x_train.reshape(60000,
784).astype('float32') / 255 x_test = x_test.reshape(10000,
784).astype('float32') / 255 # 打印消息 print('Training samples:', x_train.shape)
print('Testing samples:', x_test.shape) # 将类别转换为one-hot编码 y_train =
np_utils.to_categorical(y_train, NB_CLASSES) y_test =
np_utils.to_categorical(y_test, NB_CLASSES) # 定义网络结构 model = Sequential()
model.add(Dense(N_HIDDEN, input_shape=(RESHAPED, )))
model.add(Activation('relu')) model.add(Dense(N_HIDDEN))
model.add(Activation('relu')) model.add(Dense(NB_CLASSES))
model.add(Activation('softmax')) # 编译模型
model.compile(loss='categorical_crossentropy', optimizer=OPTIMIZER,
metrics=['accuracy']) # 设置检查点 filepath =
'saved_models/weights-improvement-{epoch:02d}-{val_acc:.5f}.hdf5' checkpoint =
ModelCheckpoint(filepath=filepath, monitor='val_acc', verbose=VERBOSE,
save_best_only=True, mode='max') # 训练模型 history = model.fit(x_train, y_train,
batch_size=BATCH_SIZE, epochs=NB_EPOCH, verbose=VERBOSE,
validation_split=VALIDATION_SPLIT, callbacks=[checkpoint]) # 评估模型 score =
model.evaluate(x_test, y_test, verbose=VERBOSE) print('Test score:', score[0])
print('Test accuracy:', score[1]) #这种方法可以保存最优的评估结果对应的模型权重,即最后一个文件
数据的保存和读取

数据存储方式:json文件、csv文件、MySQL数据库、Redis数据库以及Mongdb数据库

python用print将数据输出到记事本txt/csv:
f=open('out.txt','w') for i in range(0,5): print(i,file=f) f.close()
#f=open('results/csv/out.csv','w') #for i in range(0,5): # print(i,file=f)
#f.close()

技术
©2019-2020 Toolsou All rights reserved,
过拟合和欠拟合的形象解释2021 美赛时间安排表Springboot之JPA常用查询方法中国月球车“月兔二号”在月球发现一块奇怪岩石PS制作登录界面C语言程序设计课程设计 之《学生成绩管理系统》消息质量平台系列文章|全链路排查篇年薪20万属于什么水平?答案让人扎心!王者荣耀背景故事整合Jsp+Ajax+Servlet+Mysql实现增删改查(一)