当前位置:网站首页>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)
代码运行结果:
代码中需要注意的一些点,在代码注释中也给出了解释和提醒。
注意
- 搭建神经网络的第一层要写输入图片的大小 后面的层可以忽略
边栏推荐
- A brief history of information by James Gleick
- From starfish OS' continued deflationary consumption of SFO, the value of SFO in the long run
- 4.交叉熵
- CVE-2022-28346:Django SQL注入漏洞
- 51 communicates with the Bluetooth module, and 51 drives the Bluetooth app to light up
- 新库上线 | 中国记者信息数据
- 攻防演练中沙盘推演的4个阶段
- 第四期SFO销毁,Starfish OS如何对SFO价值赋能?
- Four stages of sand table deduction in attack and defense drill
- After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?
猜你喜欢
CVE-2022-28346:Django SQL注入漏洞
第四期SFO销毁,Starfish OS如何对SFO价值赋能?
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
SDNU_ACM_ICPC_2022_Summer_Practice(1~2)
Service mesh introduction, istio overview
How to insert highlighted code blocks in WPS and word
After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?
letcode43:字符串相乘
[Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
Codeforces Round #804 (Div. 2)(A~D)
随机推荐
Jouer sonar
Course of causality, taught by Jonas Peters, University of Copenhagen
ThinkPHP kernel work order system source code commercial open source version multi user + multi customer service + SMS + email notification
9.卷积神经网络介绍
ReentrantLock 公平锁源码 第0篇
Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
QT establish signal slots between different classes and transfer parameters
NVIDIA Jetson test installation yolox process record
STL -- common function replication of string class
Langchao Yunxi distributed database tracing (II) -- source code analysis
第一讲:链表中环的入口结点
FOFA-攻防挑战记录
Hotel
Introduction to paddle - using lenet to realize image classification method I in MNIST
【GO记录】从零开始GO语言——用GO语言做一个示波器(一)GO语言基础
Stock account opening is free of charge. Is it safe to open an account on your mobile phone
[Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
jemter分布式
Qt添加资源文件,为QAction添加图标,建立信号槽函数并实现
接口测试进阶接口脚本使用—apipost(预/后执行脚本)