当前位置:网站首页>10.CNN应用于手写数字识别
10.CNN应用于手写数字识别
2022-07-07 23:11:00 【booze-J】
代码运行平台为jupyter-notebook,文章中的代码块,也是按照jupyter-notebook中的划分顺序进行书写的,运行文章代码,直接分单元粘入到jupyter-notebook即可。整体代码给出的注释还是挺简单明了的。
1.导入第三方库
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Dropout,Convolution2D,MaxPooling2D,Flatten
from tensorflow.keras.optimizers import Adam
2.加载数据及数据预处理
# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# (60000, 28, 28)
print("x_shape:\n",x_train.shape)
# (60000,) 还未进行one-hot编码 需要后面自己操作
print("y_shape:\n",y_train.shape)
# (60000, 28, 28) -> (60000,28,28,1)=(图片数目,图片高度,图片宽度,图片的通道数) reshape()中参数填入-1的话可以自动计算出参数结果 除以255.0是为了归一化
# 归一化很关键哈,可以大大减少计算量
x_train = x_train.reshape(-1,28,28,1)/255.0
x_test = x_test.reshape(-1,28,28,1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)
3.训练模型
# 定义顺序模型
model = Sequential()
# 第一个卷积层 注意第一层要写输入图片的大小 后面的层可以忽略
# input_shape 输入平面
# filters 卷积核/滤波器个数
# kernel_size 卷积窗口大小
# strides 步长
# padding padding方式 same/valid
# activation 激活函数
model.add(Convolution2D(
input_shape=(28,28,1),
filters=32,
kernel_size=5,
strides=1,
padding="same",
activation="relu"
))
# 第一个池化层
model.add(MaxPooling2D(
pool_size=2,
strides=2,
padding="same"
))
# 第二个池化层
model.add(Convolution2D(filters=64,kernel_size=5,strides=1,padding="same",activation="relu"))
# 第二个池化层
model.add(MaxPooling2D(pool_size=2,strides=2,padding="same"))
# 把第二个池化层的输出扁平化为1维
model.add(Flatten())
# 第一个全连接层
model.add(Dense(units=1024,activation="relu"))
# Dropout 随机选用50%神经元进行训练
model.add(Dropout(0.5))
# 第二个全连接层
model.add(Dense(units=10,activation="softmax"))
# 定义优化器 设置学习率为1e-4
adam = Adam(lr=1e-4)
# 定义优化器,loss function,训练过程中计算准确率
model.compile(optimizer=adam,loss="categorical_crossentropy",metrics=["accuracy"])
# 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=10)
# 评估模型
loss,accuracy=model.evaluate(x_test,y_test)
print("test loss:",loss)
print("test accuracy:",accuracy)
代码运行结果:
代码中需要注意的一些点,在代码注释中也给出了解释和提醒。
注意
- 搭建神经网络的第一层要写输入图片的大小 后面的层可以忽略
边栏推荐
- Huawei switch s5735s-l24t4s-qa2 cannot be remotely accessed by telnet
- Which securities company has a low, safe and reliable account opening commission
- fabulous! How does idea open multiple projects in a single window?
- 5g NR system messages
- 新库上线 | 中国记者信息数据
- Is it safe to speculate in stocks on mobile phones?
- 9.卷积神经网络介绍
- Langchao Yunxi distributed database tracing (II) -- source code analysis
- ABAP ALV LVC template
- 基于微信小程序开发的我最在行的小游戏
猜你喜欢
New library online | cnopendata China Star Hotel data
Kubernetes static pod (static POD)
3 years of experience, can't you get 20K for the interview and test post? Such a hole?
新库上线 | CnOpenData中华老字号企业名录
After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?
Qt不同类之间建立信号槽,并传递参数
Langchao Yunxi distributed database tracing (II) -- source code analysis
基于人脸识别实现课堂抬头率检测
51 communicates with the Bluetooth module, and 51 drives the Bluetooth app to light up
基于微信小程序开发的我最在行的小游戏
随机推荐
手写一个模拟的ReentrantLock
What has happened from server to cloud hosting?
2022-07-07: the original array is a monotonic array with numbers greater than 0 and less than or equal to K. there may be equal numbers in it, and the overall trend is increasing. However, the number
Codeforces Round #804 (Div. 2)(A~D)
Class head up rate detection based on face recognition
英雄联盟胜负预测--简易肯德基上校
[C language] objective questions - knowledge points
New library launched | cnopendata China Time-honored enterprise directory
接口测试进阶接口脚本使用—apipost(预/后执行脚本)
Course of causality, taught by Jonas Peters, University of Copenhagen
Experience of autumn recruitment in 22 years
8道经典C语言指针笔试题解析
FOFA-攻防挑战记录
【obs】Impossible to find entrance point CreateDirect3D11DeviceFromDXGIDevice
NTT template for Tourism
Su embedded training - day4
接口测试要测试什么?
Implementation of adjacency table of SQLite database storage directory structure 2-construction of directory tree
Invalid V-for traversal element style
Stock account opening is free of charge. Is it safe to open an account on your mobile phone