MNIST数据集知识合集

MNIST数据集知识合集

  • 认识MNIST数据集
  • 通过本地文件加载MNIST数据集
  • torchvision.datasets加载MNIST数据集
    • 可视化(即转换成.jpg/.png之类的文件)
    • 疑惑—datasets.mnist和datasets.MNIST
    • 问题—download=False运行报错
  • 搭建CNN用于数字识别

认识MNIST数据集

MNIST数据集是一个手写数字数据集,训练数据集有6000028*28单通道(灰度图像)的图像;测试数据集中有10000张28*28单通道图像。
更多详细信息可参见官方网址:MNIST 其中提到数据集包括四个部分:

  • training set images: train-images-idx3-ubyte.gz
  • training set labels: train-labels-idx1-ubyte.gz
  • test set images: t10k-images-idx3-ubyte.gz
  • test set labels: t10k-labels-idx1-ubyte.gz

通过本地文件加载MNIST数据集

实验中要使用mnist数据集时,需要先加载数据集。方法之一是从先自己下载MNIST网址中给出的4个文件链接:
在这里插入图片描述
之后再写代码读取.gz文件中的信息。
其中细节感觉太过复杂(/(ㄒoㄒ)/~~),在网上看到这篇知乎文章,代码很详细,之后学习!直接解码idx-ubyte文件 以及pytorch中自定义dataset读取 [这里关于pytorch里面如何直接继承Dataset类自定义加载自己本地数据的方法,以及dataset类和dataloder类的关系需要再学习😔]
这是一个直接读取然后转换成numpy的:

import os
import numpy as np

'''直接从ubyte文件读取数据'''

data_dir = "./data/MNIST/raw"
fd = open(os.path.join(data_dir, 'train-images-idx3-ubyte'))
#读取ubyte文件并转换成numpy
loaded = np.fromfile(file=fd, dtype=np.uint8)
#train dataset原始的ubyte文件前面16个字节存的其他的 跳过
trX = loaded[16:].reshape((60000, 28, 28, 1)).astype(np.float64)

fd = open(os.path.join(data_dir, 'train-labels-idx1-ubyte'))
loaded = np.fromfile(file=fd, dtype=np.uint8)
#train label原始的ubyte文件前面8个字节存的其他的 跳过
trY = loaded[8:].reshape((60000)).astype(np.int32)

X = trX
Y = trY

print(X.shape)
print(Y.shape)

torchvision.datasets加载MNIST数据集

torchvision.datasets中有很多数据集的加载方法,比如Cifar10、STL10、SVHM、ImageNet(这个应该是需要自己先下载好,从本地文件加载)等,MNIST能用torchvison.datasets.MNIST()直接加载:

from torchvision import datasets, transforms

#下载测试集
train_dataset = datasets.MNIST('./data', #下载后存储的路径,根据实际情况使用绝对路径or相对路径
                                train=True, #训练数据集 
                                transform=transforms.ToTensor(), #转换成tensor
                                download=True #需要下载(如果本地以及下载好文件,可设置成False后从本地加载(不过好像直接设置会报错
                                )
test_dataset =  datasets.MNIST('./data', train=False, #测试数据集
                                transform=transforms.ToTensor(),
                                download=True)

运行后目录下多了对应的数据集,有8个文件,仔细看的话是4个可以直接读取的ubyte文件和4个.gz的压缩文件:
在这里插入图片描述
不过需要注意的是,一开始的路径是’./data’,但是实际上下载后还有两级目录,最终存储的路径是"./data/MNIST/raw",在后续加载对应的文件进行读取的时候,需要注意路径问题:

root="./data/MNIST/raw"

可视化(即转换成.jpg/.png之类的文件)

通过上述torchvision.dataset.MNIST加载数据集之后,因为transform=transforms.ToTensor(),所以最终图像数据是tensor类型;而实际上torchvision.dataset.MNIST是将原本ubyte数据处理成PIL的image文件,PIL可以直接存为.jpg/.png:

import torchvision.datasets as datasets  
import torchvision.transforms as transforms  
import numpy as np
import os
# 加载MNIST数据集  
train_dataset = datasets.MNIST(root='./data', train=True, download=True,  
                               transform=None) #这里没有转换成其他任何形式 
# 获取第一张图像和标签  
image, label = train_dataset[0]  
  
# image是一个PIL图像对象  
print(type(image))  # <class 'PIL.Image.Image'>  

img_path = '1.png'
img_path=os.path.join('./data', img_path)        
image.save(img_path)

运行结果:
在这里插入图片描述
在这里插入图片描述
————————————————
!!!待解决问题!!!:PIL存为图像

这里还有一个在网上看到的MNIST可视化,直接从ubyte文件读取并可视化的,用到了skimage这个库的skimage.io.save,这个方法我没咋明白,代码及运行结果如下:

import os
from skimage import io
import torchvision.datasets.mnist as mnist
from torchvision import datasets, transforms

#下载测试集
train_dataset = datasets.MNIST('./data', #下载后存储的路径
                                train=True, #训练数据集 
                                transform=transforms.ToTensor(), #转换成tensor
                                download=True #需要下载(如果本地以及下载好文件,可设置成False后从本地加载(不过好像直接设置会报错
                                )
test_dataset =  datasets.MNIST('./data', train=False, #测试数据集
                                transform=transforms.ToTensor(),
                                download=True)
#直接从ubyte文件中读取图像数据
root="./data/MNIST/raw"
train_set = (
    mnist.read_image_file(os.path.join(root, 'train-images-idx3-ubyte')),
    mnist.read_label_file(os.path.join(root, 'train-labels-idx1-ubyte'))
        )
test_set = (
    mnist.read_image_file(os.path.join(root, 't10k-images-idx3-ubyte')),
    mnist.read_label_file(os.path.join(root, 't10k-labels-idx1-ubyte'))
        )
print("training set :",train_set[0].size())
print("test set :",test_set[0].size())
#转换成image(可视化过程)
def convert_to_img(train=True):
    if(train):
        f=open(root+'train.txt','w')#这是label,单独存在txt文件中
        data_path=root+'/train/'
        if(not os.path.exists(data_path)):
            os.makedirs(data_path)
        for i, (img,label) in enumerate(zip(train_set[0],train_set[1])):
            img_path=data_path+str(i)+'.jpg'
            io.imsave(img_path,img.numpy())#转换成.jpg并存储
            f.write(img_path+' '+str(label)+'\n')
        f.close()
    else:
        f = open(root + 'test.txt', 'w')
        data_path = root + '/test/'
        if (not os.path.exists(data_path)):
            os.makedirs(data_path)
        for i, (img,label) in enumerate(zip(test_set[0],test_set[1])):
            img_path = data_path+ str(i) + '.jpg'
            io.imsave(img_path, img.numpy())
            f.write(img_path + ' ' + str(label) + '\n')
        f.close()

convert_to_img(True)#转换训练集
convert_to_img(False)#转换测试集

在这里插入图片描述

疑惑—datasets.mnist和datasets.MNIST

………………待学习

问题—download=False运行报错

用torchvision.dataset.MNIST加载MNIST数据集,直接设置download=False会报错:
解决参考:参考1 和 参考2

搭建CNN用于数字识别

……………………待学习

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

# X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系

X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系 很多人对于他们是啥是傻傻分不清的&#xff0c;我做了个表格供大家参考。 摘抄&#xff1a; X11是X Window System Protocol, Version 11&#xff08;RFC1013&#xff09;&#xff0c;是X server和X client之间的通…

搭建一个自己的文档网站

目录 简介 快速上手 配置 首页 组件Demo案例 添加搜索 简介 有时候我们可能很好奇&#xff0c;像elementUi或者vue3他们的文档网站是怎么写的&#xff0c;其实写vue文档网站的技术&#xff0c;有两个&#xff1a;一个是vuePress&#xff0c;一个是vitePress。从名字上可…

心法利器[90-95] | 谈校招:合集

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会&#xff0c;与大家一起成长。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2022年新一版的文章合集已经发布&#xff0c;累计已经60w字了&#xff0c;获取方式看这里&…

React实现点击切换组件

实现如上组件 组件代码&#xff1a; import { SwapOutlined } from "ant-design/icons" import React, { useState } from "react" import ./index.lessinterface ISwitchTypeProps {onChange?: (val) > booleanactiveKey?: stringleft: { key: str…

Opencv实战(银行卡识别)

目录 模版匹配不同方法对比一个模板匹配多个 直方图及直方图均衡化Mask操作直方图均衡化自适应直方图均衡化 模版匹配 公式 import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,nam…

云技术-混沌工程

目录 混沌工程 故障注入 监控和观测 自动化和持续集成 混沌工程 混沌工程&#xff08;Chaos Engineering&#xff09;是一种实验性的系统可靠性工程方法&#xff0c;主动引入故障和异常来测试系统的弹性和容错能力。混沌工程的核心思想是通过模拟故障场景来验证系统在各种异…

105. 从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,n…

2023年加湿器市场数据分析(天猫数据分析怎么做)

随着人们生活水平提高、空调广泛使用&#xff0c;导致皮肤紧绷、口舌干燥、咳嗽感冒等空调病的滋生。可以看出&#xff0c;空气湿度与人体健康以及日常生活有着密切的联系。而加湿器作为室内空气湿度控制的重要工具&#xff0c;在近年来受到了越来越多的重视。根据鲸参谋电商数…

linux鲁班猫代码初尝试[编译镜像][修改根文件系统重编译]

编译镜像 官方百度云盘资料:https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/quick_start/baidu_cloud/baidu_cloud.html 解压虚拟机压缩包:"鲁班猫\8-SDK源码压缩包\开发环境虚拟机镜像\ubuntu20.04.7z"后既可以用VMware打开,打开后可以看到已经有…

nginx基于源码安装的方式对静态页面、虚拟主机(IP、端口、域名)和日志文件进行配置

一.静态页面 1.更改页面内容 2.更改配置文件 3.测试 二.虚拟主机配置 1.基于IP &#xff08;1&#xff09;在html目录下新建目录存放测试文件 &#xff08;2&#xff09;修改nginx.conf文件&#xff0c;在htttp模块中配置两个server模块分别对应两个IP &#xff08;3&am…

深入解析中国供应商API:关键字搜索接口对接与商品数据交互指南

随着电商行业的快速发展&#xff0c;越来越多的企业开始与中国供应商进行合作。而为了实现有效的数据交换和协作&#xff0c;接口对接成为了不可或缺的一环。本文将深入探讨中国供应商API&#xff0c;介绍如何高效地进行接口对接与数据交互&#xff0c;并提供实用的Python示例代…

【论文阅读】基于深度学习的时序预测——Informer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长序列数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 文章地址&#xff1a;https://arxiv.org/abs/2012.07436 github地址&#xff1a;https://github.com/zhouhaoyi/Informer2020 参考解读…

【面试八股文】每日一题:谈谈你对异常的理解

每日一题-Java核心-谈谈你对异常的理解【面试八股文】 异常是程序在运行过程中出现的错误或不正常的情况。当程序执行过程中遇到无法处理的错误或者不符合预期的情况&#xff0c;就会抛出异常。异常可以分为两种类型&#xff1a;受检异常和非受检异常。 受检异常是指在程序编译…

【数据结构】链表(一)

链表&#xff08;一&#xff09; 文章目录 链表&#xff08;一&#xff09;01 引入02 概念及结构03 单向不带头不循环链表实现3.1 创建节点类型3.2 简易创建一个链表3.3 遍历链表每个节点3.4 获取链表长度3.5 查找是否包含关键字key是否在单链表当中3.6 头插法3.7 尾插法3.8 任…

国产数据库排行

目录 一、理论 1.国产数据库排行 2.数据 一、理论 1.国产数据库排行 &#xff08;1&#xff09;墨天轮榜单 墨天轮国产数据库流行度排行于2019年6月推出&#xff0c;通过近50个维度的数据来考察近300个国产数据库的流行度排行&#xff0c;每月1日更新排行数据&#xff0c…

layui的基本使用-日期控件的业务场景使用入门实战案例一

效果镇楼&#xff1b; 1 前端UI层面&#xff1b; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

虚幻引擎游戏开发过程中,游戏鼠标如何双击判定?

UE虚幻引擎对于游戏开发者来说都不陌生&#xff0c;市面上有47%主机游戏使用虚幻引擎开发游戏。作为是一款游戏的核心动力&#xff0c;它的功能十分完善&#xff0c;囊括了场景制作、灯光渲染、动作镜头、粒子特效、材质蓝图等。本文介绍了虚幻引擎游戏开发过程中游戏鼠标双击判…

培训报名小程序报名功能开发

目录 1 创建页面2 新建URL参数3 课程详细信息4 报名数据源创建5 报名信息功能开发6 设置页面跳转7 最终实现的效果总结 在培训报名小程序中&#xff0c;我们已经开发了首页和列表页。在列表页点击报名时就跳转到报名页面&#xff0c;先看我们的原型 报名页分为两个部分&#x…

多货币多汇率跨境电子商城建设(仓储管理、网络安全)

多货币多汇率跨境电子商城建设需要考虑到多个方面&#xff0c;包括仓储管理、网络安全、货币兑换、物流配送等。以下是具体的介绍&#xff1a; 一、仓储管理 仓储管理是跨境电子商城的重要组成部分&#xff0c;需要考虑到商品的存储、管理和分拣等环节。以下是需要注意的几个…

C# 使用FFmpeg.Autogen对byte[]进行编解码

C# 使用FFmpeg.Autogen对byte[]进行编解码&#xff0c;参考&#xff1a;https://github.com/vanjoge/CSharpVideoDemo 入口调用类&#xff1a; using System; using System.IO; using System.Drawing; using System.Runtime.InteropServices; using FFmpeg.AutoGen;namespace F…