mnist手写数字识别(全连接)+模型保存与调用

1、mnist 手写数字识别模型训练

1.1 训练数据shape处理

x_train的形状是(60000,28,28)改为(60000,784)
x_train.reshape((60000,-1))
reshape(元组),reshape里面要放个元组,两个括号

1.2 np_utils.to_categorical(y_train,num_classes=10)解释

将y_train,有1个数扩展为一个列表,列表的列数由num_classes指定
在这里插入图片描述

1.3 提高识别精度(增加层数)

model.add(Dense(64,activation=‘relu’)

1.4 model.fit 函数 参数理解

epochs=5,就是所有数据训练5次
verbose=1,每个batch_size训练完毕都打印一次
verbose=2,每个 epochs 训练完毕打印一次,通常选这个就行

1.5 保存模型,导入模型需要安装 h5py 这个包

安装:pip install h5py
导入训练模型: keras.load_model(".h5")
保存训练模型:model.save("
.h5")

1.6 代码实现
import tensorflow as tf
from tensorflow import keras
import numpy as np
from keras.utils import np_utils
from keras.models import Sequential
from keras.datasets import mnist
from keras.layers import Dense,Dropout,Convolution2D,MaxPooling2D,Flatten
from keras.optimizers import Adam
from keras.optimizers import SGD
import matplotlib.pyplot as plt
(x_train,y_train),(x_test,y_test)=mnist.load_data()
print(x_train.shape)
#for i in range(100):
#    plt.imshow(x_train[i])
#    plt.ion()#不暂停,一直执行
#    plt.show()
#    plt.pause(0.1)#暂停0.1s
x_train=x_train.reshape((x_train.shape[0],-1))/255.0#将x_train由(60000,28,28)变为(60000,784),由三维变为二维
x_test=x_test.reshape((len(x_test),784))/255.0#除以255实现归一化处理
y_train=np_utils.to_categorical(y_train,num_classes=10)
y_test=np_utils.to_categorical(y_test,num_classes=10)
print(x_train.shape)
model=Sequential()
#model.add(Flatten())
model.add(Dense(64,activation="relu"))
model.add(Dense(64,activation="relu"))
model.add(Dense(64,activation="relu"))
model.add(Dense(10,activation="softmax"))
model.add(Dropout(0.1))#过拟合处理
#model.add(Dense(10,input_dim=784,bias_initializer="one",activation="softmax"))
sgd=SGD(lr=0.2)
model.compile(optimizer=sgd,loss="mse",metrics=["accuracy"])
model.fit(x_train,y_train,epochs=5,batch_size=64,verbose=2)
model.save("model.h5")

2、训练模型导入

2.1模型评价

model.evaluate()使用参数 verbose=2 每个epochs打印一次

2.2模型导入load_model函数

from keras.model import load_model

2.3 代码实现
import tensorflow as tf
from tensorflow import keras
import numpy as np
from keras.utils import np_utils
from keras.models import Sequential
from keras.datasets import mnist
from keras.layers import Dense,Dropout,Convolution2D,MaxPooling2D,Flatten
from keras.optimizers import Adam
from keras.optimizers import SGD
import matplotlib.pyplot as plt
from keras.models import load_model
(x_train,y_train),(x_test,y_test)=mnist.load_data()
print(x_train.shape)
x_train=x_train.reshape((x_train.shape[0],-1))/255.0
x_test=x_test.reshape((len(x_test),784))/255.0
print(y_train[0])
y_train=np_utils.to_categorical(y_train,num_classes=10)
print(y_train[0])
y_test=np_utils.to_categorical(y_test,num_classes=10)
model=load_model("model.h5")
loss,accuracy=model.evaluate(x_test,y_test,verbose=2)
print(loss,accuracy)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值