⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计5020字,阅读大概需要10分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
⏰个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
基于Python实现手写数字识别
基于Python实现手写数字识别
实验目录
- 基于Python实现手写数字识别
实验内容
- 基于Python实现手写数字识别
知识点
- 卷积神经网络最擅长的就是图片处理,它受到人类视觉神经系统的启发
- 卷积神经网络有能够有效的将大数据量的图片降维成小数据量和能够有效的保留图片特征,符合图片处理的原则这两大特点
实验目的
- 利用python及Keras建立神经网络对手写数字识别
实验环境
- Oracle Linux 7.4
- Python 3
任务实施过程
1.打开Jupyter,并新建python工程
-
桌面空白处右键,点击Konsole打开一个终端
-
切换至
/experiment/jupyter
目录
cd experiment/jupyter
- 启动Jupyter,root用户下运行需加
–allow-root
jupyter notebook --ip=127.0.0.1 --allow-root
- 依次点击右上角的 New,Python 3新建python工程
- 点击Untitled,在弹出框中修改标题名,点击Rename确认
2.数据准备
- 输入代码后,使用shift+enter执行,下同。
- 导入所需库
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.导入数据并进行数据探索
- 导入数据集
(X_train, y_train), (X_test, y_test) = mnist.load_data() #导入数据集
- 查看数据维度
print(X_train.shape,y_train.shape,X_test.shape,y_test.shape) #打印输出数据维度
- 数据可视化
#对四张图进行可视化
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–
说明
本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我