深度学习-第T1周——实现mnist手写数字识别

news2024/12/23 13:22:20

深度学习-第T1周——实现mnist手写数字识别

  • 深度学习-第P1周——实现mnist手写数字识别
    • 一、前言
    • 二、我的环境
    • 三、前期工作
      • 1、导入依赖项并设置GPU
      • 2、导入数据集
      • 3、归一化
      • 4、可视化图片
      • 5、调整图片格式
    • 四、构建简单的CNN网络
    • 五、编译并训练模型
      • 1、设置超参数
      • 2、编写训练函数
    • 六、预测
    • 七、总结

深度学习-第P1周——实现mnist手写数字识别

一、前言

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

二、我的环境

  • 电脑系统:Windows 10
  • 语言环境:Python 3.8.5
  • 编译器:colab在线编译
  • 深度学习环境:Pytorch

三、前期工作

1、导入依赖项并设置GPU

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_device([gpu0], "GPU")

2、导入数据集

使用dataset下载MNIST数据集,并划分训练集和测试集

使用dataloader加载数据

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

(train_images, train_lables), (test_images, test_lables) = datasets.mnist.load_data()

3、归一化

数据归一化作用

  • 使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确
  • 加快学习算法的准确性
train_images, test_images = train_images / 255.0, test_images / 255.0

train_images.shape, test_images.shape, train_lables.shape, test_lables.shape

4、可视化图片

#进行图像大小为10宽10长的绘图
plt.figure(figsize = (10, 10))

for i in range(20):
    plt.subplot(2, 10, i + 1)
    #设置不显示x轴刻度
    plt.xticks([])
    #设置不显示y轴刻度
	plt.yticks([])
	#设置不显示子图网络格
	plt.grid(False)
	#图像显示,cmap为颜色绘图,plt.cm.binary为matplotlib.cm的色表
	plt.imshow(train_images[i], cmap = plt.cm.binary)
	#设置x轴为标签显示的图片的对应的数字
	plt.xlabel(train_lables[i])

5、调整图片格式

train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

四、构建简单的CNN网络

对于一般的CNN网络来说,都是由特征提取网络和分类网络构成,其中特征提取网络用于提取图片的特征,分类网络用于将图片进行分类。

#二、构建简单的CNN网络
# 创建并设置卷积神经网络
# 卷积层:通过卷积操作对输入图像进行降维和特征抽取
# 池化层:是一种非线性形式的下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的鲁棒性。
# 全连接层:在经过几个卷积和池化层之后,神经网络中的高级推理通过全连接层来完成。
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation = 'relu', input_shape= (28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation = 'relu'),
    layers.MaxPooling2D((2, 2)),

    layers.Flatten(),
    layers.Dense(64, activation = 'relu'),
    layers.Dense(10)

])

model.summary()
#以上为简单的tf八股模板,可以看B站的北大老师曹健的tensorflow笔记

在这里插入图片描述

五、编译并训练模型

1、设置超参数

#这里设置优化器,损失函数以及metrics
model.compile(
	#设置优化器为Adam优化器
    optimizer = 'adam',
    #设置损失函数为交叉熵损失函数
    loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits = True),
    metrics = ['accuracy']
)

2、编写训练函数

history = model.fit(
    train_images,
    train_lables,
    epochs = 10,
    validation_data = (test_images, test_lables)
)

在这里插入图片描述

六、预测

plt.imshow(test_images[1])

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

在这里插入图片描述

七、总结

提前看了一遍北大软微老师的tf笔记,对于tensorflow建模型的八股大致弄懂了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】Jupyter .ipynb

Jupyter启动Hello JupyterMarkdown纵然 Anaconda Pycharm 非常好用,但是既然学到 Jupyter,那就多掌握一份技能,毕竟 Jupyter 的确有他的优势在。 我认为 Jupyter 对于 Python 初学者来说,非常友善,他将一整个代码划分…

c#学习笔记

目录1.语句块2.Write和WriteLine的区别:3.params4.托管代码和非托管代码5.DllImport的使用:6.WriteLine、ReadLine和ReadKey:7.C#中访问修饰符8.类型的实例化9.成员可以分为两种:数据成员和函数成员10.枚举enum和结构struct的区别…

使用Debussy加载设计项目

Debussy是NOVAS Software, Inc(思源科技)用来进行HDL Debug & Analysis的工具,这套软体主要不是用来跑模拟或看波形,它最强大的功能是:能够在HDL source code、schematic diagram、waveform、state bubble diagram之间,即时做…

蓝桥杯-考勤刷卡

蓝桥杯-考勤刷卡1、问题描述2、解题思路3、代码实现1、问题描述 小蓝负责一个公司的考勤系统, 他每天都需要根据员工刷卡的情况来确定 每个员工是否到岗。 当员工刷卡时, 会在后台留下一条记录, 包括刷卡的时间和员工编号, 只 要在一天中员工刷过一次卡, 就认为他到岗了。 现在…

电子技术——数字逻辑反相器

电子技术——数字逻辑反相器 在学习完如何通过CMOS数字电路实现组合逻辑,接下来我们评估这种数字CMOS电路的性能。首先,我们考虑最基本的部件——反相器。 电压传导特性 下图是一个反相器的原理图: 在之前,我们已经介绍了MOSFE…

ATTCK v12版本战术介绍持久化(三)

一、引言在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行战术、持久化战术(一)及(二)知识,本期我们为大家介绍ATT&CK 14项战术中持久化战术(三)涉及的剩余子技术&…

汇编语言程序设计(一)

前言 在学习汇编语言之前,我们应该要知道汇编语言他是一门怎么样的语言。汇编语言是直接工作在硬件上的一门编程语言,学习汇编语言之前最好先了解一下计算机硬件系统的结构和工作原理。学习汇编语言的重点是学习如何利用硬件系统的编程结构和指令集进而…

高通平台开发系列讲解(显示篇)Gralloc模块

文章目录 一、什么是Gralloc模块二、Gralloc加载流程三、Gralloc模块的加载四、Gralloc设备的加载五、 fb设备的加载沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍显示过程中Gralloc模块。 一、什么是Gralloc模块 通过加载Gralloc抽象层,可以打开fb设备和…

【游戏逆向】寻路函数隐藏检测点分析

案例: 某游戏出现调用寻路函数失败异常崩溃。 基本情况分析: 在刚登陆游戏的时候直接调用寻路函数崩溃。 手动寻路以后再调用寻路不崩溃。(排除了函数编写错误的可能) 猜测可能检测方法: 有某一个标志位(全局类型)在游戏刚登陆的时候没…

【VS】【Qt】vs+ qt .natvis 失效问题

【VS】【Qt】vs qt .natvis 失效问题 .natvis文件用于调试时候自定义显示自定义类型的可视化提示。 一般这类文件存在 C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\Common7\Packages\Debugger\Visualizers路径下。 .natvis文件的规则在此不介绍&#xf…

剑指 Offer 23 链表中环的入口结点

摘要 链表中环的入口结点_牛客题霸_牛客网 剑指 Offer II 022. 链表中环的入口节点 141. 环形链表 142. 环形链表 II 一、是否有环(快慢指针) 我们可以根据上述思路来解决本题。具体地,我们定义两个指针,一快一慢。慢指针每次…

了解Cesium的笛卡尔类型和位置变量的单位

var position Cesium.Cartesian3.fromDegrees(100, 100, 2); 前文输出了position变量,是一个六位数,还带有多位小数;下面来看一下相关类的定义和position的单位;单位如果不对的话放置的模型可能到屏幕外面; 看一下相…

太赫兹频段耦合器设计相关经验总结

1拿到耦合器的频段后,确定中心频率和波导的宽度和高度 此处贴一张不同频段对应的波导尺寸图 需要注意的是1英寸 2.54厘米,需注意换算 具体网址:矩形波导尺寸 | 扩维 (qualwave.com) 仅列举我比较常用的太赫兹频段部分 2.以220~320GHz频段&a…

《后疫情时代大众行为及情感变化研究报告》|人们的饮食、工作、运动、社交、娱乐、学习、购物有哪些改变?

疫情三年,改变了很多人的生命轨迹。有人长期居家,宅出了一身的厨艺;有人启动线上模式,习惯了居家办公;有人失去了工作,生活一度陷入困境;有人痛定思痛,准备换个城市换个活法。 个体…

项目管理工具dhtmlxGantt甘特图入门教程(十六):数据序列转化为XML和JSON

这篇文章给大家讲解dhtmlxGantt将数据转化为XML何JSON格式。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足应用程序的所有需求,是完善的甘特图图表库 DhtmlxGantt正版试用下载(qun:764148812&#…

提取DWI数据的FA和MD

DWI简介 扩散加权磁共振成像(DWI )是使用特定的 MRI 序列以所获得的脑成像数据,该成像手段依靠水分子的扩散在 MR 图像中产生对比度。优于组织中的分子扩散不是自由的,而是反映了与许多障碍物(例如大分子,纤…

福特FORD EDI流程指南

在此前的文章:福特FORD EDI需求分析中,我们为大家介绍了福特FORD的EDI平台——GEC Hub。与福特FORD建立EDI连接需要基于这个平台来进行。 供应商通过GEC Hub与福特建立EDI连接,需要做如下准备: 1.获得GSDB代码以及供应商代码 2.在…

是不是只能学IT互联网技术才有发展前途?

当然不是,三百六十行,行行出状元。 但我们需要认清一个现实是,我们正处于一个信息爆炸的时代,掌握紧跟潮流的技术,才可以让我们更自信地面对每天的生活,才有多余的精力、财力来享受生活。“人生在世&#…

华为机试题:HJ99 自守数(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

十八、本地方法栈的理解

本地方法栈(Native Method Stack) 1.Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。 2.本地方法栈,也是线程私有的。 3.允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 1)如果线程请求分…