深度学习入门-第3章-神经网络

news2024/10/4 13:55:04

前面的待补充

3.6 手写数字识别
3.6.1 MNIST 数据集
本书提供了便利的 Python 脚本 mnist.py ,该脚本支持从下载 MNIST 数据集到将这些数据转换成 NumPy 数组等处理(mnist.py 在 dataset 目录下)。
使用 mnist.py 时,当前目录必须是 ch01 、ch02 、ch03、…、ch08 目录中的一个。使用 mnist.py 中的 load_mnist() 函数,就可以按下述方式轻松读入 MNIST 数据。
实际使用中是报错的,提示urllib.request获取数据失败,检查代码:
from dataset.mnist import load_mnist
使用的是dataset目录下的mnist.py中的load_mnist函数
直接查看mnist.py源码:
 

url_base = 'http://yann.lecun.com/exdb/mnist/'
key_file = {
    'train_img':'train-images-idx3-ubyte.gz',
    'train_label':'train-labels-idx1-ubyte.gz',
    'test_img':'t10k-images-idx3-ubyte.gz',
    'test_label':'t10k-labels-idx1-ubyte.gz'
}

dataset_dir = os.path.dirname(os.path.abspath(__file__))
save_file = dataset_dir + "/mnist.pkl"

上面的代码是把从网站下载的4个文件放到mnist.pkl中保存。下载代码如下:

def _download(file_name):
    file_path = dataset_dir + "/" + file_name
    
    if os.path.exists(file_path):
        return
    urllib.request.urlretrieve(url_base + file_name, file_path)

直接运行,下载这一步报错了。从浏览器直接下载试试

MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges

下载被拒绝,网上搜了一下原因,然后就更换为:

GitHub - zalandoresearch/fashion-mnist: A MNIST-like fashion product database. Benchmark

下载OK了,但里面的图明显不是0-9的数字,库不太对,又找了一个:

vision/torchvision/datasets/mnist.py at ddad38f3a84d4d87cbb389bc78e245920fe86f82 · pytorch/vision · GitHub

https://ossci-datasets.s3.amazonaws.com/mnist/

这个库也不太对,里面显示的应该也是各种衬衫、裙子的识别,估计和fashion-mnist是一样的。

最终在github上找到了原始的0-9数字数据集:
https://github.com/geektutu/tensorflow-tutorial-samples/blob/master/mnist/data_set/                        
通过浏览器下载到dataset目录,就可以了。
程序下载经常会失败,原因众所周知,国内访问github总是时灵时不灵,用浏览器也要多刷几次才行(骂一句万恶的墙,啥时候才能拆了接轨世界)。

插曲:如果是内网,python下载需要在程序中设置代理。

    file_path = dataset_dir + "/" + file_name
    
    if os.path.exists(file_path):
        return

    print("set proxy...")
    # 设置代理
    proxies = {'http': 'http://proxy.xxx:80', 'https': 'https://proxy.xxx:80'}
    proxy_handler = urllib.request.ProxyHandler(proxies)
 
    # 创建Opener
    opener = urllib.request.build_opener(proxy_handler)
    # 安装Opener
    urllib.request.install_opener(opener)

    print("Downloading " + file_name + " ... ")
    urllib.request.urlretrieve(url_base + file_name, file_path)
    print("Done")

下载好了dataset就可以mnist_show.py了,提示还有错误:

D:\python\test\ch03>py mnist_show.py
Traceback (most recent call last):
  File "mnist_show.py", line 5, in <module>
    from PIL import Image
ModuleNotFoundError: No module named 'PIL'
PIL 库没有?
py -m pip install Pillow --proxy http://proxy.xxx.cn:80 -i https://pypi.tuna.tsinghua.edu.cn/simple

Installing collected packages: Pillow
Successfully installed Pillow-9.5.0
成功安装Pillow后问题解决。

mnist_show.py代码,加了注释

import sys,os
sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定,这里要用dataset目录下的mnist.py文件
import numpy as np
from dataset.mnist import load_mnist  # 导入mnist.py文件中的load_mnist函数
from PIL import Image  # 这个包需要单独安装,py -m pip install Pillow --proxy http://proxy.xxx.cn:80 -i https://pypi.tuna.tsinghua.edu.cn/simple 

def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))  # 把保存为 NumPy 数组的图像数据转换为 PIL 用的数据对象
    pil_img.show()

# 第一次加载需要几分钟,load_mnist是从网上下载,如前所述,直接手工下载到dataset目录就行了,不需要执行下载,这样就快了
# load_mnist 函数以“( 训练图像, 训练标签 ),( 测试图像, 测试标签 ) ”的形式返回读入的 MNIST 数据
(x_train, t_train),(x_test, t_test) = load_mnist(
    flatten=True,  # flatten=True 时读入的图像是以784个元素构成的一维数组的形式保存的。因此,显示图像时,需要把它变为原来的 28像素 × 28 像素的形状。
    normalize=False) # normalize 设置是否将输入图像正规化为 0.0~1.0 的值。如果将该参数设置为 False ,则输入图像的像素会保持原来的 0~255

# 输出各数据的形状
print(x_train.shape)  # (60000, 784)
print(t_train.shape)  # (60000,)
print(x_test.shape)   # (10000, 784)
print(t_test.shape)   # (10000,)

img = x_train[0]
label = t_train[0]
print(label)

print(img.shape)
img = img.reshape(28,28)  # 通过 reshape() 方法的参数指定期望的形状,更改 NumPy 数组的形状。
print(img.shape)

img_show(img)

运行结果和书上是一样的,标签是5,图形也是5,侧面证明和书上的数据集是一套。

D:\python\test\ch03>py mnist_show.py
(60000, 784)
(60000,)
(10000, 784)
(10000,)
5
(784,)
(28, 28)

图形:

其他内容待续:

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

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

相关文章

2米量级高速风洞测量系统,智能装备与通信技术产业展览会(2024中国军民两用)

"2米量级高速风洞测量系统&#xff1a;规范化改进与未来展望" 在航空航天领域&#xff0c;风洞试验是评估飞行器设计性能的关键手段。为了满足日益增长的科研需求&#xff0c;对2米量级高速风洞测量系统的规范化改进变得尤为重要。本文将探讨该系统的改进措施及其在…

打开C# 大门:Hallo, World!

C# 介绍 C#&#xff08;C Sharp&#xff09;是一种面向对象的编程语言&#xff0c;由微软公司开发。它是 .NET Framework 的一部分&#xff0c;用于构建 Windows 应用程序、Web 应用程序、移动应用程序等。C# 语言的设计目标是简单、现代化、易于学习和使用。在本文中&#xf…

【数据结构】排序(直接插入、折半插入、希尔排序、快排、冒泡、选择、堆排序、归并排序、基数排序)

目录 排序一、插入排序1.直接插入排序2.折半插入排序3.希尔排序 二、交换排序1.快速排序2.冒泡排序 三、选择排序1. 简单选择排序2. 堆排序3. 树排序 四、归并排序(2-路归并排序)五、基数排序1. 桶排序&#xff08;适合元素关键字值集合并不大&#xff09;2. 基数排序基数排序的…

JAVA-学习

一、垃圾回收机制 1、为什么要进行垃圾回收机制 如果不进行垃圾回收&#xff0c;内存迟早都会被消耗空&#xff0c;因为我们在不断的分配内存空间而不进行回收。除非内存无限大&#xff0c;我们可以任性的分配而不回收&#xff0c;但是事实并非如此。所以&#xff0c;垃圾回收…

DS:数与二叉树的相关概念

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点…

阿里云镜像加速配置(工作中经常用到,写在此方便)

原因 由于运营商网络原因&#xff0c;会导致您拉取Docker Hub镜像变慢&#xff0c;甚至下载失败。为此&#xff0c;阿里云容器镜像服务ACR提供了官方的镜像加速器&#xff0c;从而加速官方镜像的下载。 获取镜像加速器地址 ACR会为每一个账号&#xff08;阿里云账号或RAM用户…

地球科学SCI期刊,中科院2区,IF=14.6,自引率低,无预警风险!

一、期刊名称 IEEE Geoscience and Remote Sensing Magazine 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;地球科学 影响因子&#xff1a;14.6 中科院分区&#xff1a;2区 三、期刊征稿范围 IEEE地球科学和遥感杂志向读者介绍IEEE GRS协会及其技术委员…

Unity打包Webgl端进行 全屏幕自适应

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一&#xff1a;修改 index.html二&#xff1a;将非移动端设备&#xff0c;canvas元素的宽度和高度会设置为100%。三&#xff1a;修改style.css总结 下载地址&#x…

SBOM是如何帮助医疗器械制造商提高产品透明度的?

SBOM&#xff08;软件物料清单&#xff09;通过以下方式帮助医疗器械制造商提高产品透明度&#xff1a; 1. 详细记录软件组成 SBOM详细列出了医疗器械所使用的所有软件组件、版本、作者、许可证信息等。这使得制造商能够清晰地了解产品的软件组成&#xff0c;包括每个组件的来…

蓝牙AOA定位专用温补晶振TG5032CFN

随着物联网&#xff08;IoT&#xff09;技术的迅猛发展&#xff0c;蓝牙AOA&#xff08;Angle of Arrival&#xff09;定位技术在智能家居、工业自动化、资产跟踪和健康监测等领域中得到了广泛应用。为了确保蓝牙AOA定位系统的高精度和稳定性&#xff0c;选择合适的时钟源至关重…

【智能AI相机】基于AI的新型成像和照明技术

缩短检测时间 降低废品率和成本 更快捕捉更多缺陷 ” Trevista CI Dome将康耐视专利的计算成像算法与结构化漫射圆顶照明相结合&#xff0c;提供无与伦比的地形图像质量&#xff0c;为光泽和哑光表面检测提供创新解决方案。有助于&#xff1a;缩短检测时间、降低废品率和成本…

6月6号直播预告 | 认识PCIE464控制卡及其EtherCAT驱动器与控制卡常用回零模式介绍

在智能装备领域&#xff0c;精度、效率和产能是关键的竞争力指标&#xff0c;大多数都面临备货排产要求高、需要调度协同生产和更高的加工精度等问题&#xff0c;特别是在3C电子、半导体设备、锂电光伏等高速高精制造领域。 运动控制系统的性能直接影响生产质量和效率&#xf…

磷酸二氢锂电池水中除硼、盐湖氯化镁卤水中除硼深度处理

Tulsimer CH-99 硼选择吸附树脂 Tulsimer CH-99 是一款去除水溶液中硼及其盐的选择性离子交换树脂。在一些化工工业以及农业用水中&#xff0c;微量的硼或者硼盐都可能是严重的问题。此种树脂可以在较大的PH 范围内甚至有其他离子存在的溶液中有效的去除硼以及硼盐&#xff0c…

HCIP-Datacom-ARST自选题库__多种协议简答【11道题】

1.BGP/MPLSIP VPN的典型组网场景如图所示&#xff0c;PE1和PE2通过LoopbackO建立MP-IBGP&#xff0c;PE1和PE2之间只传递VPN路由&#xff0c;其中PE1BGP进程的部分配置已在图中标出&#xff0c;则编号为0的命令不是必须的。(填写阿拉伯数字) 3 2.在如图所示的Hub&amp;Spok…

FANUC机器人SRVO-348 DCS MCC关闭报警处理方法总结

FANUC机器人SRVO-348 DCS MCC关闭报警处理方法总结 如下图所示,由于操作人员在操机时误打开了安全门,导致机器人紧急制动停止,示教器上显示: SRV0-348 DCS MCC关闭报警0,1, 如下图所示,查看手册中关于SRVO-348报警的具体内容: 原因分析:给机器人主电源上电的接触器在紧…

arm cortex-m架构 SVC指令详解以及SVC异常在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述&#xff0c; 关于arm cortex-m的一些基础知识可以参考我另外几篇文章&#xff1a; arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12&#xff1a;条件码&#…

JVM-JAVA-类加载过程

JVM源码 类加载到 JVM 的过程通过 java 命令执行代码的流程 类加载到 JVM 的过程 在运行一个 main 函数启动程序是&#xff0c;首先需要类加载起把主类加载到 JVM 中 通过 java 命令执行代码的流程 loadClass的类加载过程有如下几步&#xff1a; 类被加载到方法区中后主要包…

【数据结构与算法】二叉树的基本概念

文章目录 二叉树的基本概念定义二叉树的性质 几种特殊的二叉树满二叉树完全二叉树二叉排序树平衡二叉树正则二叉树 二叉树的存储结构顺序存储结构链式存储结构 二叉树的基本概念 定义 二叉树是一种特殊的树形结构&#xff0c;其特点是每个结点至多只有两颗子树&#xff0c;并…

前端生成海报图技术选型与问题解决

作者&#xff1a;vivo 互联网大前端团队 - Tian Yuhan 本篇文章主要聚焦海报图分享这个形式&#xff0c;探讨纯前端在H5&小程序内&#xff0c;合成海报到下载到本地、分享至社交平台整个流程中可能遇到的问题&#xff0c;以及如何解决。 一、引言 绝大多数的电商平台都会…

Hive 基本操作

1.启动Hadoop集群 2.将学生信息上传到/bigdata/hive/hive_stu目录下 查看测试数据 3.进入hive,切换到db_test库&#xff08;如没有&#xff0c;可以先创建 create database db_test&#xff09;