当前位置: 首页 > news >正文

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

前面的待补充

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_nameif os.path.exists(file_path):returnurllib.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_nameif os.path.exists(file_path):returnprint("set proxy...")# 设置代理proxies = {'http': 'http://proxy.xxx:80', 'https': 'https://proxy.xxx:80'}proxy_handler = urllib.request.ProxyHandler(proxies)# 创建Openeropener = urllib.request.build_opener(proxy_handler)# 安装Openerurllib.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)

图形:

其他内容待续:

相关文章:

  • 数据结构:链式队列
  • C++ Primer 第五版 第15章 面向对象程序设计
  • 结账和反结账
  • 【学习笔记】Windows GDI绘图(九)Graphics详解(中)
  • JVM 指针压缩
  • 超越Devin!姚班带队,他们创大模型编程新世界纪录
  • Python3 元组
  • 制造企业如何通过PLM系统实现BOM管理的飞跃
  • AI的绘画工具有哪些?
  • 批量归一化(BN)和层归一化(LN)的区别
  • 【电子通识】什么是电力电子
  • 001----flask
  • C#,JavaScript实现浮点数格式化自动保留合适的小数位数
  • Flutter 中的 SliverLayoutBuilder 小部件:全面指南
  • Flutter:革新移动开发的开源框架
  • [译]前端离线指南(上)
  • Apache Pulsar 2.1 重磅发布
  • DataBase in Android
  • Fastjson的基本使用方法大全
  • JAVA 学习IO流
  • JSDuck 与 AngularJS 融合技巧
  • JS基础之数据类型、对象、原型、原型链、继承
  • js中forEach回调同异步问题
  • laravel 用artisan创建自己的模板
  • miaov-React 最佳入门
  • passportjs 源码分析
  • React as a UI Runtime(五、列表)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 百度地图API标注+时间轴组件
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 二维平面内的碰撞检测【一】
  • 力扣(LeetCode)21
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何实现 font-size 的响应式
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​人工智能书单(数学基础篇)
  • ###项目技术发展史
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (day 12)JavaScript学习笔记(数组3)
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (SERIES12)DM性能优化
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十一)c52学习之旅-动态数码管
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)visual stdio 书签功能介绍
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net Core 微服务之Consul(二)-集群搭建