MNIST手写数字识别代码实践

任务背景

手写数字识别作为深度学习经典入门案例, 能够帮助您快速了解关于CNN卷积神经网络的模型结构及原理

卷积神经网络原理解析

请参考该博文: http://www.elecfans.com/rengongzhineng/580113.html

MNIST数据集介绍

请参考该博文: https://www.jianshu.com/p/050750a1bb5e

模型建立及训练

请参考该博文: https://blog.csdn.net/weixin_41196817/article/details/82770448
为方便, 我这里贴上代码:

#导入需要的包
from __future__ import print_function
import keras 
from keras.models import Sequential 
from keras.layers import Dense , Conv2D,MaxPooling2D,Flatten,Dropout 
from keras.datasets import mnist 
from keras import backend as K

#定义好一些参数
batch_size = 64
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

#加载数据
(x_train ,y_train),(x_test,y_test) = mnist.load_data(path='mnist.npz')  #选中,go_to_definiation  ,把下载#的代码去掉

if K.image_data_format() == 'channels_first':
	x_train = x_train.reshape([x_train.shape[0],1,img_rows,img_cols])
	x_test = x_test.reshape([x_test.shape[0],1,img_rows,img_cols])
	input_shape = [1,img_rows,img_cols]
else:
	x_train = x_train.reshape([x_train.shape[0],img_rows,img_cols,1])
	x_test = x_test.reshape([x_test.shape[0],img_rows, img_cols,1])
	input_shape = [img_rows,img_cols,1]

#单精度的数据类型更利于深度学习的计算
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')

#像素值都归一化到0-1之间
x_train /= 255
x_test /= 255

#对标签数据进行独热 编码
y_train = keras.utils.to_categorical(y_train,num_classes)
y_test = keras.utils.to_categorical(y_test , num_classes)

#构造模型了
model = Sequential()   #更正:不是model.Sequential()

model.add(Conv2D(32,kernel_size =(3,3),activation='relu',input_shape = input_shape))
model.add(Conv2D(64,kernel_size=(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))   #更正:这里是pool_size 不是kernel_size 
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(num_classes,activation='softmax'))

model.compile(loss = keras.losses.categorical_crossentropy,optimizer = keras.optimizers.Adadelta(),metrics=['accuracy'])  #这里的optimizers 有s

model.fit(x_train,y_train,batch_size = batch_size ,epochs = epochs,verbose=2,validation_data=(x_test,y_test))  #注意是epochs 不是es

score = model.evaluate(x_test,y_test,verbose=0)
print('Test Loss:', score[0])
print('Test Accuarcy:', score[1]) 

————————————————
版权声明:本文为CSDN博主「helun_wang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41196817/article/details/82770448

模型保存及预测

# 将整个模型保存为HDF5文件
model.save('./my_model.h5')

# 读取手机拍照图片并进行图片处理及预测
import os
from skimage import transform, io
import numpy as np
import keras
import warnings
warnings.filterwarnings('ignore')

# 定义读取图片
def deal_image(path):
    test_images = []
    images_list = os.listdir(path)
    for image in images_list:
    
        img = io.imread('./image/{}'.format(image), as_gray=True)        
        reimg = transform.resize(img, (28, 28))
        test_images.append(reimg)
        
    return test_images
    
# 读取图片
test_images = deal_image('./image')
# 重新创建完全相同的模型,包括其权重和优化程序
new_model = keras.models.load_model('my_model.h5')

# 预测结果
for test_image in test_images:
	
	# 将白底黑字转化为黑底白字
    test_image = 1 - test_image.reshape([-1, 28, 28, 1])
    
    # 0.5位阈值, 作用是去除背景效果
    test_image = np.where(test_image < 0.5, 0.1, 1)

	# 预测数字并打印
    number = new_model.predict(test_image)
    print(number.reshape((10, )).argmax())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值