MNIST数据集下载与保存为图片格式

2023-10-31

MNIST 数据集下载 与 保存为图片格式

1.MNIST数据集

下载地址:http://yann.lecun.com/exdb/mnist/

获得文件:

1.train-images.idx3-ubyte.gz:训练集图片(9912422字节),55000张训练集,5000张验证集
2.train-labels.idx1-ubyte.gz:训练集图片对应的标签(28881字节),
3.t10k-images.idx3-ubyte .gz:测试集图片(1648877字节),10000张图片
4.t10k-labels.idx1-ubyte.gz:测试集图片对应的标签(4542字节)

解压后获得:

train-images.idx3-ubyte

train-labels.idx1-ubyte

t10k-images.idx3-ubyte

t10k-labels.idx1-ubyte

2 保存为图片格式

# 导入包
import struct
import numpy as np
from PIL import Image

class MnistParser:
   # 加载图像
   def load_image(self, file_path):

       # 读取二进制数据
       binary = open(file_path,'rb').read()

       # 读取头文件
       fmt_head = '>iiii'
       offset = 0

       # 读取头文件
       magic_number,images_number,rows_number,columns_number = struct.unpack_from(fmt_head,binary,offset)

       # 打印头文件信息
       print('图片数量:%d,图片行数:%d,图片列数:%d'%(images_number,rows_number,columns_number))

       # 处理数据
       image_size = rows_number * columns_number
       fmt_data = '>'+str(image_size)+'B'
       offset = offset + struct.calcsize(fmt_head)

       # 读取数据
       images = np.empty((images_number,rows_number,columns_number))
       for i in range(images_number):
           images[i] = np.array(struct.unpack_from(fmt_data, binary, offset)).reshape((rows_number, columns_number))
           offset = offset + struct.calcsize(fmt_data)
           # 每1万张打印一次信息
           if (i+1) % 10000 == 0:
               print('> 已读取:%d张图片'%(i+1))

       # 返回数据
       return images_number,rows_number,columns_number,images


   # 加载标签
   def load_labels(self, file_path):
       # 读取数据
       binary = open(file_path,'rb').read()

       # 读取头文件
       fmt_head = '>ii'
       offset = 0

       # 读取头文件
       magic_number,items_number = struct.unpack_from(fmt_head,binary,offset)

       # 打印头文件信息
       print('标签数:%d'%(items_number))

       # 处理数据
       fmt_data = '>B'
       offset = offset + struct.calcsize(fmt_head)

       # 读取数据
       labels = np.empty((items_number))
       for i in range(items_number):
           labels[i] = struct.unpack_from(fmt_data, binary, offset)[0]
           offset = offset + struct.calcsize(fmt_data)
           # 每1万张打印一次信息
           if (i+1)%10000 == 0:
               print('> 已读取:%d个标签'%(i+1))

       # 返回数据
       return items_number,labels


   # 图片可视化
   def visualaztion(self, images, labels, path):
       d = {0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0}
       for i in range(images.__len__()):
            im = Image.fromarray(np.uint8(images[i]))
            im.save(path + "%d_%d.png"%(labels[i], d[labels[i]]))
            d[labels[i]] += 1
            # im.show()
            
            if (i+1)%10000 == 0:
               print('> 已保存:%d个图片'%(i+1))
               

# 保存为图片格式
def change_and_save():
    mnist =  MnistParser()

    trainImageFile = './train-images.idx3-ubyte'
    _, _, _, images = mnist.load_image(trainImageFile)
    trainLabelFile = './train-labels.idx1-ubyte'
    _, labels = mnist.load_labels(trainLabelFile)
    mnist.visualaztion(images, labels, "./images/train/")

    testImageFile = './train-images.idx3-ubyte'
    _, _, _, images = mnist.load_image(testImageFile)
    testLabelFile = './train-labels.idx1-ubyte'
    _, labels = mnist.load_labels(testLabelFile)
    mnist.visualaztion(images, labels, "./images/test/")


# 测试
if __name__ == '__main__':
    change_and_save()

.py文件与train-images.idx3-ubyte、train-labels.idx1-ubyte、t10k-images.idx3-ubyte、t10k-labels.idx1-ubyte放在同一文件夹中,在相同目录中建立一个images文件夹。
请添加图片描述
images文件夹中建立testtrain文件,此时运行代码
请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MNIST数据集下载与保存为图片格式 的相关文章

随机推荐

  • 【01】-迟来的毕设进度记录-【场景搭建、photon实时实现联机(二)】

    嗨我又回来了 今天的任务是 场景KO掉啦 大概基础就这样 植被细节接着弄 重大突破 在动画方面进行了修改 如下图 思路是 玩家按下鼠标左键直接攻击播放攻击动画 不需要bool繁琐的判断 代码也简化 而且之前有BUG 就是玩家按着鼠标左键时
  • SQL ORDER BY 关键字

    ORDER BY 关键字用于对结果集进行排序 SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序 ORDER BY 关键字默认按照升序对记录进行排序 如果需要按照降序对记录进行排序 您可以使用
  • 《Ordinal Depth Supervision for 3D Human Pose Estimation》-CVPR2018 论文阅读

    简介 Ordinal Depth Supervision for 3D Human Pose Estimation 是一篇CVPR2018 Oral Presentation的工作 主要解决RGB的3D human pose estimat
  • 虚拟机中安装win7报错【解决方案】

    问题 You have configured this virtual machine to use a 64 bit guest operating system However 64 bit operation is not possi
  • 图像数据集整理汇总(包含ImageNet、旷视、VOC、COCO等等)

    链接 https pan baidu com s 1t8mQQzXJvxSA8GcCXbNIhA 提取码 pys8 ImageNet https image net org download php 旷视CrowdHuamn数据集 http
  • Kafka3.0.0版本——增加副本因子

    目录 一 服务器信息 二 启动zookeeper和kafka集群 2 1 先启动zookeeper集群 2 2 再启动kafka集群 三 增加副本因子 3 1 增加副本因子的概述 3 2 增加副本因子的示例 3 2 1 创建topic 主题
  • 计算机网络 谢希仁 课后习题部分答案

    试说明IP地址与硬件地址的区别 为什么要使用这两种不同的地址 解 IP地址放在IP数据报的首部 硬件地址则放MAC帧的首部 在网络层和网络层以上使用IP地址 数据链路层及以下使用硬件地址 IP 地址就是给每个连接在因特网上的主机 或路由器
  • aspose操作文档

    操作aspose版本 aspose words 21 4 官网下载地址 https releases aspose com words java 问题 1 每次操作文档的时候都要重新保存 不然文件损坏 打开的文件就是乱码的 记录一些简单的功
  • RobotFramework环境配置七:多浏览器兼容性测试(1)

    多浏览器兼容性测试 1 RIDE已经支持多浏览器兼容性测试 例如 firefox ie chrome safari 但是 项目要求支持360极速和360安全浏览器 所以 我们需要增加代码让RIDE识别 其他浏览器类似 本地浏览器 说明 基于
  • 电源完整性的很好的解释

    电源和地层大块平面间构成了谐振腔 高速数字信号经过时 犹如快艇在湖面掀起一阵波浪 电源地之间电压起了波动 既然是谐振 机械上叫共振 就要固有频率 这个固有频率是与电源和地平面的形状 中间的介质参数 介电常数 损耗 厚度 有关系的 一旦这些参
  • 1、Django使用Bootstrap

    1 Django使用Bootstrap 学习一段时间Django后 想写一个博客 CSS框架使用Bootstrap 但是将bootstrap css源文件拷贝到到app static css下后 发现无任何效果 百思不得其解 郁闷了一天后
  • 数据结构知识整理

    标题2020 1024 996 你品 你细品 堆 栈 队列 大根堆小根堆 大根堆 堆顶的元素是最大的 越往下越小 小根堆 堆顶的元素是最小的 越往下越大 大根堆小根堆的声明 priority queue
  • 通过超链接 解析zip压缩包 中的 xml 内容

    import com alibaba fastjson JSON import com api zp documentexchange OkHttp import okhttp3 OkHttpClient import okhttp3 Re
  • Eigen与cuda兼容问题解决

    1 报错 usr include eigen3 Eigen src Core arch CUDA Half h 596 error no suitable constructor exists to convert from float t
  • 源码解析(一):Spring JDBC如何实现多数据源

    Spring JDBC如何实现多数据源 背景 类介绍 bean初始化设置属性 1 AbstractRoutingDataSource 属性 2 初始化设置 设置当前lookupKey 1 获取 lookupKey 2 找到目标数据源 获取连
  • kali自动化渗透神器websploit模块介绍

    websploit 安装websploit root kali2 apt get install websploit root kali2 websploit db d8b db d88888b d8888b d8888 d8888b db
  • Linux操作系统下如何查看磁盘的queue_depth(队列深度),安排!

    Linux中的queue depth 队列深度 可以用lsscsi查看 lsscsi l 0 0 1 0 disk FUJITSU MAM3184MP 0105 dev sda state running queue depth 16 sc
  • Eureka服务注册与发现

    Eureka服务注册与发现 1 什么是Eureka 2 Eureka原理 3 对比Zookeeper 1 什么是Eureka Eureka是Netflix的子模块 Eureka是一个基于Rest的服务 用于定位服务 以实现云端中间层服务发现
  • 【无公网IP内网穿透】异地远程访问本地SQL Server数据库

    目录 1 前言 2 本地安装和设置SQL Server 2 1 SQL Server下载 2 2 SQL Server本地连接测试 2 3 Cpolar内网穿透的下载和安装 2 3 Cpolar内网穿透的注册 3 本地网页发布 3 1 Cp
  • MNIST数据集下载与保存为图片格式

    文章目录 MNIST 数据集下载 与 保存为图片格式 1 MNIST数据集 2 保存为图片格式 MNIST 数据集下载 与 保存为图片格式 1 MNIST数据集 下载地址 http yann lecun com exdb mnist 获得文