第一周:手写数字识别

一、前期工作

语言环境:Python3.6.5
编译器:jupyter notebook
深度学习环境:TensorFlow2

1. 设置GPU(如果使用的是CPU可以忽略这步)

import tensorflow as tf
gpus = tf.config.list_physical_devices("GPU")

if gpus:
    gpu0 = gpus[0]
    tf.config.experimental.set_memory_growth(gpu0,True)
    tf.config.set_visible_devices([gpu0],"GPU")

2. 导入数据

import tensorflow as tf
from tensorflow.keras import datasets,layers,models
import matplotlib.pyplot as plt

(train_images,train_labels),(test_images,test_labels)=datasets.mnist.load_data()

3. 归一化
使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。
加快学习算法的收敛速度。

train_images,test_images=train_images/255.0,test_images/255.0
train_images.shape,test_images.shape,train_labels.shape,test_labels.shape

输出:((60000, 28, 28), (10000, 28, 28), (60000,), (10000,))

4. 可视化图片

#可视化图片
plt.figure(figsize=(20,10))
for i in range(20):
    plt.subplot(2,10,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i],cmap=plt.cm.binary)
    plt.xlabel(train_labels[i])
plt.show()

输出为:
在这里插入图片描述

5. 调整图片格式

#调整图片格式
train_images=train_images.reshape((60000,28,28,1))
test_images=test_images.reshape((10000,28,28,1))

train_images.shape,test_images.shape,train_labels.shape,test_labels.shape

二、构建CNN网络模型

#构建cnn网络
model =models.Sequential([
    layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)),
    layers.MaxPool2D((2,2)),
    layers.Flatten(),
    layers.Dense(64,activation='relu'),
    layers.Dense(10)
])
#打印网络结构
model.summary()

网络结构
在这里插入图片描述

三、编译模型

#模型编译
model.compile(
    optimizer='adam',
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=['accuracy']
)

四、训练模型

#训练模型
history = model.fit(
    train_images,
    train_labels,
    epochs=10,
    validation_data=(test_images,test_labels)
)

训练过程
在这里插入图片描述

五、预测

通过下面的网络结构我们可以简单理解为,输入一张图片,将会得到一组数,这组代表这张图片上的数字为0~9中每一个数字的几率,out数字越大可能性越大。
LeNet-5网络结构
在这里插入图片描述

plt.imshow(test_images[1])

在这里插入图片描述

pre =model.predict((test_images))
pre[1]

准确率为:
在这里插入图片描述
声明
本人为初学者,教程来源为k同学啊的100例。
首先了解卷积层各个层的作用与优化功能:

输入层: 用于将数据输入到训练网络
卷积层: 使用卷积核提取图片特征
池化层: 进行下采样,用更高层的抽象表示图像特征
Flatten层:将多维的输入一维化,常用在卷积层到全连接层的过渡
全连接层:起到“特征提取器”的作用
输出层: 输出结果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值