【深度学习】实现基于MNIST数据集的TensorFlow/Keras深度学习案例

news2024/11/29 4:43:32

基于TensorFlow/Keras的深度学习案例

  • 实现基于MNIST数据集的TensorFlow/Keras深度学习案例
    • 0. 什么是深度学习?
    • 1. TensorFlow简介
    • 2. Keras简介
    • 3. 安装TensorFlow前的注意事项
    • 4. 安装Anaconda3及搭建TensorFlow环境
      • 1) 下载安装Anaconda Navigator
      • 2) 创建最新版Python 3.12.X适用的TensorFlow虚拟环境
      • 3) 激活TensorFlow虚拟环境
      • 4) 安装TensorFlow
        • A. 从阿里云的pip源安装TensorFlow:
        • B. 从清华大学镜像网站安装:
      • 5) 验证TensorFlow版本
    • 5. 认识并下载MNIST数据集
      • 1) MNIST数据集简介
      • 2) MNIST数据集的功能
      • 3) 对于MNIST数据集的典型工作流程
      • 4) 下载MNIST数据集
    • 6. TensorFlow/Keras项目案例
      • 1) 深度学习案例一
      • 2) 深度学习案例二

实现基于MNIST数据集的TensorFlow/Keras深度学习案例

[Deep Learning] Implement A Deep Learning Project Based-on MNIST Dataset on TensorFlow and Keras

By Jackson@ML

0. 什么是深度学习?

深度学习是机器学习的一个子集,它使用多层神经网络(称为深度神经网络)来模拟人脑的复杂决策能力。某种形式的深度学习为当今生活中的大多数人工智能 (AI) 应用程序提供支持。

深度学习和机器学习之间的主要区别在于底层神经网络架构。“非深度”的传统机器学习模型使用具有一个或两个计算层的简单神经网络,而深度学习模型则采用三层或更多层(但通常为数百或数千层)来训练模型。
– IBM官网

监督学习模型需要结构化的、标记的输入数据才能完成准确的输出,而深度学习模型可以使用无监督学习。通过无监督学习,深度学习模型可以提取所需的特征、特征和关系,以便由原始的非结构化数据中提取进行准确的输出。此外,这些模型甚至还可以评估和优化输出以提高其精度。

深度学习是数据科学的一个方面,它推动了许多应用程序和服务,这些应用程序和服务可以提高自动化水平,无需人工干预即可执行分析和物理任务。这使得许多每天日常的产品和服务成为可能,例如数字助理、支持语音的电视遥控器、信用卡欺诈检测、自动驾驶汽车和生成式人工智能等。

1. TensorFlow简介

TensorFlow 是一个用于快速数值计算的开源库。TensorFlow (TF) 由 Google Brain 开发,是用于深度学习模型量产的最知名的库。
2015年11月9日,TensorFlow被Google(谷歌)公司所创立,之后由谷歌持续维护至今,并在 Apache 2.0 开源许可下发布。尽管该 API 名义上用于 Python 编程语言,但仍然可以访问底层 C++ API。

在这里插入图片描述
与Theano等其他用于深度学习的数值库不同,TensorFlow被设计用于研发和生产系统,尤其是谷歌搜索中的RankBrain和一些有趣的DeepDream项目。

它可以在单个 CPU 系统和 GPU 上运行,也可以在移动设备和数百台机器的大规模分布式系统上运行。

TensorFlow(简称TF)因其知名度而拥有非常庞大的社区。但是,TensorFlow 的学习曲线很陡峭。为了更好地进行深度学习试验,经由Keras 不断积累,则是个不错的选择;它是建立在 TensorFlow 之上的高级 API。与 TF 相比,它显得用户友好且更易于使用,并且用户可以更快地熟悉它,因为它更“pythonic”,也就是更加Python化,具有更多Python的特点。

那么,为什么不单独使用Keras呢?当然可以。但是,如果想更好地控制模型网络,获得更好的调试,或者开发新的网络并在未来进行一些深度学习研究,那么 TensorFlow 就是您的最佳选择。

在本文的简短介绍中,将引导和帮助您搭建 TensorFlow 深度学习环境。Keras API 包含在 TensorFlow 中,但您也可以单独下载和使用它。

2. Keras简介

Keras是一个基于Python的深度学习框架,可以方便地定义和训练几乎所有类型的深度学习模型。
Keras源于宽松的MIT许可证发布,因此,用户可以在商业项目中免费使用它,并且,它兼容所有版本的Python(从Python 2.7到Python 3.7及以上版本)。

在这里插入图片描述
Keras是一个模型级(model-level)的库,为开发深度学习提供了高层次的构建模块,它依赖一个专用的、高度优化的张量库,即后端引擎(backend engine)。

目前Keras有几个后端实现,其中,TensorFlow后端就是最流行的深度学习平台。
因此,本文项目案例,除了使用TensorFlow之外,还需要安装和导入Keras.

3. 安装TensorFlow前的注意事项

安装前的一些注意事项包括:是否使用 GPU?
图形处理单元 (GPU) 是一种微处理芯片,旨在处理计算环境中的图形,并且可以具有比中央处理器 (CPU) 多得多的内核。更多的 GPU 内核允许更好地计算多个并行进程。如果您可以访问 GPU,您如何使用它?

  • 在用户计算机上,如果您使用 pip 安装了 TensorFlow,则最新版本将支持 GPU。对于 1.15 及更早版本,CPU 和 GPU 包是分开的。
    以下分别是支持CPU和GPU的安装命令:
pip install tensorflow (for CPU)
pip install tensorflow-gpu (for GPU)
  • 但是,这并不那么简单,因为您还需要安装一些NVIDIA®软件要求。建议遵循 TensorFlow 的安装说明来了解 GPU 支持。

4. 安装Anaconda3及搭建TensorFlow环境

1) 下载安装Anaconda Navigator

笔者之前发布过关于Anaconda3安装指南 - 《2024最新版Anaconda Navigator安装使用指南》,以下是访问链接,敬请关注。
https://blog.csdn.net/jackson_lingua/article/details/139386602?spm=1001.2014.3001.5501

2) 创建最新版Python 3.12.X适用的TensorFlow虚拟环境

由于Anaconda Navigator已经安装完毕,因此,我们使用Anaconda的命令行终端来操作创建基于最新版Python 3.12.x的TensorFlow虚拟化环境。

conda create -n tensorflowenv python==3.12

执行结果如下图所示:

在这里插入图片描述

注: Anaconda Navigator安装过程中,可能要求用户选择默认配置,即选择内置的Python 3.11安装包,如果选择并完成安装,则上述命令中的Python版本,可以修改为python==3.11.

3) 激活TensorFlow虚拟环境

创建完毕虚拟环境后,打开Anaconda Prompt命令行窗口并“以管理员身份运行”,执行以下命令激活虚拟环境:

conda activate tensorflowenv

激活成功后,命令行变为:

(tensorflowenv) C:\WINDOWS\system32\

4) 安装TensorFlow

在pypi.org官网项目清单中,查到TensorFlow安装命令很简单:

pip install tensorflow

但由于实际搭建环境的时候,计算机可能附带有不同版本的Python,同时,海内外有很多后台服务器都可能在为tensorflow服务。

在国内搭建环境,为了加快下载安装速度,可以打开Anaconda Prompt(以管理员身份运行),继续在虚拟环境下,使用conda命令从以下两个镜像网站之一安装TensorFlow:

A. 从阿里云的pip源安装TensorFlow:
pip install tensorflow -i https://mirrors.aliyun.com/pypi/simple

在这里插入图片描述

B. 从清华大学镜像网站安装:

https://pypi.tuna.tsinghua.edu.cn/simple/tensorflow/
点击该网页,选择适用于Windows系统的安装链接,再次使用pip来安装TensorFlow软件包。

5) 验证TensorFlow版本

仍然打开Anaconda Prompt 命令行窗口并且以管理员身份运行。

执行python命令,运行Python交互式解释器窗口。

C:\WINDOWS\system32\python

使用命令如下图,验证TensorFlow版本

>>> import tenforflow as tf
>>> print(tf.__version__)

在这里插入图片描述
可以看出,TensorFlow版本验证,是通过调用tf对象(即Tensor Flow的实例)的__version__来查看的。

查看的结果是,TensorFlow当前版本为 2.16.1,的确是最新的发行版本,于2024年3月9日发布。

5. 认识并下载MNIST数据集

1) MNIST数据集简介

MNIST数据库(修改后的国家标准与技术研究院数据库)是手写数字的大量集合。它有一个包含 60,000 个示例的训练集和一个包含10,000个示例的测试集。它是更大的NIST特殊数据库3(由美国人口普查局的员工编写的数字)和特殊数据库1(由高中生编写的数字)的子集,其中包含手写数字的单色图像。这些数字已标准化大小,并在固定大小的图像中居中。
NIST的原始黑白(双层)图像经过大小归一化,以适合20x20像素的框,同时保持其纵横比。生成的图像包含灰度,这是归一化算法使用的抗锯齿技术的结果。通过计算像素的质心,将图像置于 28x28 图像的中心,并平移图像,以便将该点定位在 28x28 场的中心。
– 来自于 https://paperswithcode.com/dataset/mnist

  • MNIST 数据集是 70,000 个手写数字 (0-9) 的集合,每个图像为 28×28 像素。以下是指定格式的数据集信息:

    实例数:70,000 张图像
    属性数量:784(28×28像素)
    目标:列表示手写图像对应的数字 (0-9)
    像素 1-784:每个像素值 (0-255) 表示图像中相应像素的灰度强度。
    数据集分为两个主要子集:
    训练集:由 60,000 张图像及其标签组成,通常用于训练机器学习模型。
    测试集:包含 10,000 张图像及其相应的标签,用于评估训练模型的性能。

2) MNIST数据集的功能

MNIST 数据集目前代表了图像处理和机器学习中许多任务的主要输入,可以追溯到美国国家标准与技术研究院 (NIST)。NIST是一家专注于测量科学和标准的美国政府机构,负责管理各种数据集,包括两个与手写数字特别相关的数据集:

特殊数据库 1 (SD-1):由于作为美国人口普查局的雇员,工作场所中有相当多的人口是私人手写数据——它们都来自理想的来源。人口普查人员重复处理书面值,从而使他们的样本在算法训练中成功的机会很高。
特别数据库3(SD-3):该数据集包含由学生提供的高中生的数字化笔迹数字。然而,就真实性而言,这些信息看起来不如人口普查局提供的数字那么“官方”,但最棒的是它们适用于各种写作风格。

3) 对于MNIST数据集的典型工作流程

对于MNIST数据集的典型Keras工作流程如下:

  • 1.定义训练数据:输入张量和目标张量;
  • 2.定义层组成的网络(或模型),将输入映射到目标;
  • 3.配置学习过程:选择损失函数、优化器和需要监控的指标;
  • 4.调用模型的fit方法,在训练数据上迭代。

4) 下载MNIST数据集

打开Chrome浏览器,在必应搜索引擎(https://cn.bing.com)中,搜索关键字,可以找到MNIST数据集在Github的链接:https://github.com/cvdfoundation/mnist

点击进入该页面,看到需要下载的共有四个链接,分别是:

  • Training images,
  • Training labels,
  • Testing images,
  • Testing labels

如下图图所示。

在这里插入图片描述
点击各个链接,很快,数据集文件就下载到Windows中;从“下载”文件夹里,可以看到这四个gz结尾的文件,如下图所示:

在这里插入图片描述

6. TensorFlow/Keras项目案例

完成了上述步骤的准备工作,并分别验证各个第三方库安装正确后,就可以导入并使用TensorFlow库了。
在虚拟环境下,标准导入命令为:

import tensorflow

以下举两个例子,分别来看如何使用TensorFlow/Keras实现对MNIST数据集的深度学习过程。

1) 深度学习案例一

示例代码如下:

# Import libraries and framework
from tensorflow import  keras
from keras import datasets
import  matplotlib.pyplot as plt
import  numpy as np
import gzip

# To load FashionMNIST dataset,there are two ways below
# 1.Online downloading mode
(x_train,y_train),(x_test,y_test)= datasets.fashion_mnist.load_data()
# 2.Local dataset reading mode(download and save datasets into a path)
# def load_data(path,files):
#     paths = [path+ each for each in files ]
#     with gzip.open(paths[0], 'rb') as lbpath:
#         train_labels = np.frombuffer(lbpath.read(), np.uint8, offset=8)
#     with gzip.open(paths[1], 'rb') as impath:
#         train_images = np.frombuffer(impath.read(), np.uint8, offset=16).reshape(len(train_labels),28,28)
#     with gzip.open(paths[2], 'rb') as lbpath:
#         test_labels = np.frombuffer(lbpath.read(), np.uint8, offset=8)
#     with gzip.open(paths[3], 'rb') as impath:
#         test_images = np.frombuffer(impath.read(), np.uint8, offset=16).reshape(len(test_labels), 28, 28)
#     return (train_labels,train_images), (test_labels,test_images)

# Define a path to dedicated dataset
path = './dataset/FashionMNIST/'

files = ['train-labels-idx1-ubyte.gz','train-images-idx3-ubyte.gz', 't10k-labels-idx1-ubyte.gz',  't10k-images-idx3-ubyte.gz']

# Call local saved dataset to extract training data and testing data
# (y_train, x_train), (y_test, x_test) = load_data(path, files)

# print out the shape of training and testing set
print(x_train.shape,y_train.shape)
print(x_test.shape,y_test.shape)
# training set and testing set
x_train = x_train.reshape(-1, 28, 28, 1)
x_test = x_test.reshape(-1, 28, 28, 1)
# combine the training and testing dataset
x_train = x_train / 255.0
x_test = x_test / 255.0

# Build a LeNet-5 model
model = keras.Sequential([
    keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Flatten(),
    keras.layers.Dense(512, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
# print out network structure
model.summary()
# Complie a model
model.compile(loss='sparse_categorical_crossentropy',
              optimizer=keras.optimizers.Adam(lr=0.001),
              metrics=['accuracy'])

# A model training test set
# Using the model training method - model.fit()
epochs = 5
batch_size = 128
# Visualize the training process
history = model.fit(x_train, y_train, batch_size=batch_size, epochs=5, shuffle=True,
                    validation_data=(x_test, y_test))

# Visualize the loss rate of process,save it as an image
plt.figure('loss')
plt.plot(np.arange(0,epochs),history.history['loss'] , 'r', label="Train_loss")
plt.plot(np.arange(0,epochs), history.history['val_loss'], 'b', label="Valid_loss")
plt.title("Loss")
plt.xlabel('epochs')
plt.ylabel('train/test loss')
plt.grid(True)
plt.legend()
# save the result as an image
plt.savefig('./loss.png')

# a model training and visualization process
plt.figure('accuracy')
plt.plot(np.arange(0,epochs), history.history['accuracy'], 'r', label="Train_acc")
plt.plot(np.arange(0,epochs), history.history['val_accuracy'], 'b', label="Valid_acc")
plt.title("Acc")
plt.xlabel('epochs')
plt.ylabel('train/test acc')
plt.grid(True)
plt.legend()
# Set and save the result as an image
plt.savefig('./acc.png')
plt.show()
plt.close()

运行结果如下图所示:
在这里插入图片描述

2) 深度学习案例二

以下代码示例,为加载 MNIST 数据集的Keras 示例,检索训练图像和标签,然后连续绘制四个图像及其相应的标签。每个图像都以灰度显示。

示例代码如下:

# Import libraries
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
import numpy as np

# Load the MNIST dataset
(X_train, y_train), (_, _) = mnist.load_data()

# Print 4 images in a row
plt.figure(figsize=(10, 5))
for i in range(4):
    plt.subplot(1, 4, i+1)
    plt.imshow(X_train[i], cmap='gray')
    plt.title(f"Label: {y_train[i]}")
    plt.axis('off')
plt.tight_layout()
plt.show()

运行结果如下图所示:
在这里插入图片描述

以上就是运用TensorFlow/Keras进行深度学习的基础环境搭建及应用过程。

基于深度学习,后续还有更多案例,敬请关注, 并欢迎点赞收藏。

您的认可,我的动力!😊

继续你的创作。

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

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

相关文章

使用ESP32和Flask框架实现温湿度数据监测系统

项目概述 在这个项目中,我们将使用ESP32微控制器读取温湿度传感器的数据,并将这些数据通过HTTP请求传输到基于Flask框架的服务器。Flask是一个轻量级的Python Web框架,非常适合快速开发和部署Web应用。通过这个项目,我们不仅可以了…

36 - 按分类统计薪水(高频 SQL 50 题基础版)

36 - 按分类统计薪水 -- 方法一 selectLow Salary category,sum(income <20000) accounts_count fromAccounts union selectAverage Salary category,sum(income between 20000 and 50000) accounts_count fromAccounts union selectHigh Salary category,sum(in…

Linux htop命令使用

文章目录 简介界面介绍第一行第二行第三行第四行 如何使用 简介 htop 是一个类似于 top 的命令&#xff0c;但具有更丰富的功能和更友好的界面。它可以实时显示系统中各个进程的资源占用情况&#xff0c;如 CPU 使用率、内存使用率等。以下是对 htop 命令的完全解析&#xff1…

CANoe CAPL如何模拟发送CAN错误帧?

目录 canOutputErrorFrame介绍代码output(errorframe)代码总结canOutputErrorFrame 介绍 代码 canOutputErrorFrame(errorFrame, 12, 0); //output Error Frame with 12 dominant bits on CAN1 canOutputErrorFrame(CAN2.errorFrame, 6,

物理层(一)

第2章 物理层 2.1 通信基础 2.1.1 基本概念 1、数据、信号与码元 通信的目的是传输信息&#xff0c;如文字、图像和视频等。数据是指传送信息的实体。信号则是数据的电气或电磁表现&#xff0c;是数据在传输过程中的存在形式。数据和信号都有模拟或数字之分:①模拟数据(或模…

一个电商创业者眼中的618:平台大变局

战役结束了&#xff0c;战斗还在继续。 一位朋友去年5月创业&#xff0c;网上卖咖啡&#xff0c;这个赛道很拥挤&#xff0c;时机也不好&#xff0c;今年是他参加第一个618。朋友说&#xff0c;今年的目标是锤炼团队&#xff0c;总结方法&#xff0c;以及最重要的——活下去。…

设计模式——设计模式原则

设计模式 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 设计模式原则 单一职责原则&#xff08;SPS&#xff09;&#xff1a; 又称单一功能原则&#xff0c;面向对象五个基本原则&#xff08;SOLID&#xff09;之一 原则定义&#xf…

PHP环境搭建之使用PhpStudy

文章目录 1 PhpStudy1.1 简介1.2 下载&安装1.3 修改配置1.3.1 Apache配置1.3.2 MySQL配置1.3.3 MySQL启动问题 1.4 Composer1.4.1 简介1.4.2 下载安装1.4.3 修改配置1.4.4 使用命令 1 PhpStudy 1.1 简介 phpstudy是一个php运行环境的集成包&#xff0c;用户不需要去配置运…

2024/06/21--代码随想录算法10-12/17| 子序列问题

300.最长递增子序列 力扣链接 动规五部曲 dp的定义 dp[i]表示子序列答案以nums[i]结尾的最长递增子序列的长度 为什么一定表示 “以nums[i]结尾的最长递增子序” &#xff0c;因为我们在 做 递增比较的时候&#xff0c;如果比较 nums[j] 和 nums[i] 的大小&#xff0c;那么两…

怎么采集阿里巴巴1688的商品或商家数据?

怎么使用简数采集器批量采集阿里巴巴1688的商品或商家相关信息呢&#xff1f; 简数采集器暂时不支持采集阿里巴巴1688的相关数据&#xff0c;谢谢。 简数采集器采集网络网页数据非常简单高效&#xff1a;输入要采集的网址&#xff0c;简数智能算法会自动提取出网页上的关键信…

windows端口被占用问题,杀死进程

描述&#xff1a;端口被占用 在使用IntelliJ IDEA运行程序时&#xff0c;可能会遇到端口占用的情况&#xff0c;这通常由以下几个原因引起&#xff1a; 1、同一程序多次启动&#xff1a;如果你没有正确关闭之前运行的程序实例&#xff0c;再次尝试运行相同的程序时&#xff0c;…

前端实现对本地文件的IO操作

前言 在网页中&#xff0c;前端已经可以读取本地文件系统&#xff0c;对本地的文件进行IO读写&#xff0c;甚至可以制作一个简单的VScode编辑器。这篇文章以渐进式方式实现此功能&#xff0c;文末附上所有代码。 首先看整体功能演示 功能概述 我们将实现一个简单的 Web 应…

全面国产化信创适配改造方案说明

一、概叙 系统的全面国产化适配改造需要从多个方面进行考虑&#xff0c;改造前需要进行充分的论证&#xff0c;在满足具体业务场景的前提下&#xff0c;以确保系统的稳定性和安全性&#xff0c;同时还要考虑技术的发展&#xff0c;不断优化和更新。因此全面国产化适配改造也面临…

【React】富文本编辑器react-quill

安装 react-quill 富文本编辑器 npm i react-quill2.0.0-beta.2报错解决&#xff1a; npm i react-quill2.0.0-beta.2 --legacy-peer-deps导入编辑器组件和配套样式文件 import ReactQuill from react-quill // 1 import react-quill/dist/quill.snow.css // 2const Publi…

C++:STL容器-map

C:STL容器-map 1. map构造和赋值2. map大小和交换3. map插入和删除4. map查找和统计5. map容器排序 map中所有元素都是pair&#xff08;对组&#xff09; pair中第一个元素为key&#xff08;键&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实…

开发指南033-数据库兼容

元芳&#xff0c;你怎么看&#xff1f; 单一数据库自身就有一些不同处理之处&#xff0c;如果一个平台要兼容所有数据库&#xff0c;就是难上加难&#xff0c;像isnull函数各数据库就不同。 对于这类问题&#xff0c;平台采用统一自定义函数解决&#xff0c;例如上面的round函…

Go 与 Java 字符编码选择:UTF-8 与 UTF-16 的较量

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Nature Climate Change | 气候变暖会造成未来全球干旱区面积扩张?

在气候变暖的情况下&#xff0c;旱地通常被预测将在全球范围内扩大&#xff0c;旱地包括以水资源有限、植被稀疏为特征的土地区域。然而&#xff0c;这种预测依赖于旱地的大气代用物&#xff0c;即干旱指数。最近的研究表明&#xff0c;干旱指数对陆地水循环的各种组成部分的预…

前端vite+vue3——利用环境变量和路由区分h5、pc模块打包(从0到1)

⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享 前端vitevue3——利用环境变量和路由对前端区分h5和pc模块打包&#xff08;从0到1&#xff09;。 背景&#xff1a; 前端本地开发pc和h5的项目&#xff0c;发布时需要区分开h5和pc的页面 vite Vite 通过在一开始将应…

【办公类-50-01】20240620自主游戏观察记录表19周内容打乱

背景需求&#xff1a; 又到了期末&#xff0c;各种班级资料需要提交。 有一份自主游戏观察记录需要写19周&#xff08;每周2次&#xff09;的观察记录&#xff0c;并根据参考书填写一级、三级、五级的评价指标。 去年中六班的时候&#xff0c;我很认真的手写了21周的户外游戏…