深度学习笔记--使用keras训练&保存&加载CNN模型

这篇博客详细介绍了如何在Keras中保存和加载已经训练好的卷积神经网络(CNN)模型。首先,通过保存模型的架构(architecture,以json文件形式)和权重(以h5文件形式),然后展示了完整的训练和保存模型的代码,其中模型在MNIST数据集上训练,仅用1轮就能达到约90%的精度。接着,文章说明了如何加载模型并使用model.predict()进行新样本的预测,强调了加载模型时需分开加载json和h5文件,以及输入样本应为四维向量。最后,通过一个测试样本验证了模型预测的准确性。
摘要由CSDN通过智能技术生成

基于之前的一篇博文

深度学习笔记–使用keras创建CNN模型

里面介绍了如何使用keras建立cnn模型,加载mnist数据集,并且进行训练。那么问题来了,训练好的模型,如何进行保存进行利用?以及如何使用model进行预测新样本的类别,本文将给出详细介绍。
保存模型
模型的保存分为两步,一个是保存模型的结构,即architecture,这里的结构是不带参数的,保存为json文件,代码如下。

     #save architecture
     json_string = model.to_json()  
     open('./my_model_architecture.json','w').write(json_string)

第二个是保存权重,代码如下。

     #save weights
     model.save_weights('./my_model_weights.h5') 

结合之前的mnist cnn模型代码,训练&保存模型全代码如下。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("./", one_hot=True)
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
from keras import optimizers
from keras.optimizers import SGD
import keras.models 
from keras.models import load_model


if __name__ == "__main__":
     print (mnist.train.images.shape,mnist.train.labels.shape)
     sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
     x_train,y_train = mnist.train.images,mnist.train.labels
     x_test,y_test= mnist.test.images,mnist.test.labels
     x_train = x_train.astype('float32')
     x_test = x_test.astype('float32')
     x_train = x_train.reshape(x_train.shape[0],28,28,1)
     x_test = x_test.reshape(x_test.shape[0],28,28,1)
     print (x_train.shape)
     print (y_train.shape)
     #build the model
     model = Sequential()
     model.add(Conv2D(32,(3,3),activation = 'relu',input_shape = (28,28,1),padding='same'))
     model.add(MaxPooling2D(pool_size = (2,2)))
     model.add(Conv2D(64,(3,3),activation = 'relu',padding='same'))
     model.add(MaxPooling2D(pool_size = (2,2)))
     model.add(Flatten())
     model.add(Dense(128,activation = 'relu'))
     model.add(Dense(10,activation = 'softmax'))
     print (model.summary())
     model.compile(loss=keras.losses.categorical_crossentropy,optimizer=sgd,metrics=['accuracy'])
     model.fit(x_train,y_train,batch_size = 100,epochs = 1)
     score = model.evaluate(x_test,y_test)
     print ("loss: "+str(score[0]))
     print ("accuracy: "+str(score[1]))
     #save architecture
     json_string = model.to_json()  
     open('./my_model_architecture.json','w').write(json_string)
     #save weights
     model.save_weights('./my_model_weights.h5') 

这里为了速度,epoch设为1,一轮训练的模型精度在90%左右。

这个json文件打开内容如下:


{"class_name
  • 1
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值