基于Python实现手写数字识别

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计5020字,阅读大概需要10分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
⏰个人网站:https://jerry-jy.co/

❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我

基于Python实现手写数字识别


实验目录

  1. 基于Python实现手写数字识别

实验内容

  1. 基于Python实现手写数字识别

知识点

  1. 卷积神经网络最擅长的就是图片处理,它受到人类视觉神经系统的启发
  2. 卷积神经网络有能够有效的将大数据量的图片降维成小数据量和能够有效的保留图片特征,符合图片处理的原则这两大特点

实验目的

  1. 利用python及Keras建立神经网络对手写数字识别

实验环境

  1. Oracle Linux 7.4
  2. Python 3

任务实施过程

1.打开Jupyter,并新建python工程

  1. 桌面空白处右键,点击Konsole打开一个终端

  2. 切换至/experiment/jupyter目录

cd experiment/jupyter
  1. 启动Jupyter,root用户下运行需加–allow-root
jupyter notebook --ip=127.0.0.1 --allow-root

在这里插入图片描述
在这里插入图片描述

  1. 依次点击右上角的 New,Python 3新建python工程

在这里插入图片描述

在这里插入图片描述

  1. 点击Untitled,在弹出框中修改标题名,点击Rename确认

在这里插入图片描述

2.数据准备

  1. 输入代码后,使用shift+enter执行,下同。
  2. 导入所需库
from keras.models import Sequential  #定义网络模型
from keras.layers import Dense, Dropout, Activation, Flatten  #导入全连接层、Dropout层、激活层
from keras.layers import Convolution2D, MaxPooling2D  #导入卷积层,池化层
from keras.utils import np_utils
from keras.datasets import mnist  #导入数据集
from keras.utils import to_categorical
import matplotlib.pyplot as plt   #可视化

在这里插入图片描述

3.导入数据并进行数据探索

  1. 导入数据集
(X_train, y_train), (X_test, y_test) = mnist.load_data()   #导入数据集

在这里插入图片描述

  1. 查看数据维度
print(X_train.shape,y_train.shape,X_test.shape,y_test.shape)   #打印输出数据维度

在这里插入图片描述

  1. 数据可视化
#对四张图进行可视化
plt.subplot(221)  #可视化参数
print(y_train[4545],y_train[1],y_train[2],y_train[3])  #输出图像类别
plt.imshow(X_train[4545], cmap=plt.get_cmap('gray')) #对第一张图进行可视化
plt.subplot(222)
plt.imshow(X_train[1], cmap=plt.get_cmap('gray'))  #对第二张图进行可视化
plt.subplot(223)
plt.imshow(X_train[2], cmap=plt.get_cmap('gray'))  #对第三张图进行可视化
plt.subplot(224)
plt.imshow(X_train[3], cmap=plt.get_cmap('gray'))  #对第四张图进行可视化
# 显示图像
plt.show()

在这里插入图片描述

4.数据预处理

X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)  #对训练集图像进行维度转换
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) #对测试集图像进行维度转换
 
[Code 006]:
plt.subplot(224)  #可视化参数
plt.imshow(X_train[4545][0], cmap=plt.get_cmap('gray'))  #可视化
plt.show()

在这里插入图片描述

X_train = X_train.astype('float32')  #对训练集图像数据转换数据类型
X_test = X_test.astype('float32')  #对测试集图像数据转换数据类型
X_train /= 255  #对训练集数据标准化
X_test /= 255  #对测试集数据标准化

在这里插入图片描述

y_train = to_categorical(y_train)  #训练集标签one-hot转换
y_test = to_categorical(y_test)  #测试集标签one-hot转换

在这里插入图片描述

print(y_train[4545])   #打印数据维度
plt.imshow(X_train[4545][0], cmap=plt.get_cmap('gray'))  #可视化
plt.show() #显示图像

在这里插入图片描述

5.搭建卷积网络

model = Sequential()  #利用Sequential定义模型
model.add(Convolution2D(32,(3,3),activation='relu',data_format='channels_first',input_shape=(1,28,28)))  #卷积层操作
model.add(Convolution2D(32, 3, 3, activation='relu'))  #卷积层操作
model.add(MaxPooling2D(pool_size=(2,2)))  #池化层
model.add(Dropout(0.25))   #添加参数为0.25的Dropout层
model.add(Flatten())
model.add(Dense(128, activation='relu'))  #全连接层
model.add(Dropout(0.5))  #添加参数为0.5的Dropout层
model.add(Dense(10, activation='softmax'))   #全连接层

在这里插入图片描述

6.模型编译

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])   #模型编译

在这里插入图片描述

7.网络训练并查看训练效果

model.fit(X_train, y_train,batch_size=32, nb_epoch=5, verbose=1)  #网络训练 

在这里插入图片描述

score = model.evaluate(X_test, y_test, verbose=0)  #网络训练结果评价
print(score)  #输出损失及准确率

在这里插入图片描述

k = np.array(X_train[4545])   
print(k.shape)   #打印数据维度
y= k.reshape(1,1,28,28)  #图像数据维度改变
print(y.shape)

在这里插入图片描述

prediction = model.predict(y)   #预测
print(prediction)  #输出各类别概率

在这里插入图片描述

model.predict_classes(y)  #预测类别

在这里插入图片描述

–end–

说明

本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂开发的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值