《如何制作类mnist的金融数据集》——3.生成index.ubyte文件

3 .生成index.ubyte文件

这里我主要参考了 这篇博客,他们把这块的知识解释得很到位了,我这里也没什么补充的。主要是拿到训练集图片与标签的index_ubyte文件和测试集的图片与标签的index_ubyte文件。共四个文件。

非常感谢我的参考博客:

https://blog.csdn.net/qq_44042678/article/details/131631917?spm=1001.2014.3001.5506

直接上代码:

python 复制代码
import os  # 用于操作系统相关的功能
from PIL import Image  # 用于处理图像
from array import *  # 用于数组操作
from random import shuffle  # 用于打乱数据顺序

# 图像数据的加载和保存路径
Names = [['./training-images', 'train'], ['./test-images', 'test']]

# 遍历输入的训练和测试数据集
for name in Names:

    # 创建图像数据和标签数据的数组
    data_image = array('B')
    data_label = array('B')

    # 获取文件列表
    FileList = []
    for dirname in os.listdir(name[0])[1:]:  # [1:] 用于排除 Mac OS 中的 .DS_Store 文件夹
        path = os.path.join(name[0], dirname)
        for filename in os.listdir(path):
            if filename.endswith(".png"):
                FileList.append(os.path.join(name[0], dirname, filename))

    # 打乱文件列表的顺序,有助于进一步划分验证集
    shuffle(FileList)

    # 遍历文件列表
    for filename in FileList:

        # 获取标签并打开图像文件
        label = int(filename.split('/')[2])
        Im = Image.open(filename)
        pixel = Im.load()
        width, height = Im.size

        # 遍历图像像素并将其添加到图像数据中
        for x in range(0, width):
            for y in range(0, height):
                data_image.append(pixel[y, x])

        data_label.append(label)  # 添加标签到标签数据中

    # 计算文件数并将其转换成十六进制形式
    hexval = "{0:#0{1}x}".format(len(FileList), 6)

    # 为标签数组添加头信息
    header = array('B')
    header.extend([0, 0, 8, 1, 0, 0])
    header.append(int('0x' + hexval[2:][:2], 16))
    header.append(int('0x' + hexval[2:][2:], 16))
    data_label = header + data_label

    # 为图像数组添加附加头信息
    if max([width, height]) <= 256:
        header.extend([0, 0, 0, width, 0, 0, 0, height])
    else:
        raise ValueError('Image exceeds maximum size: 256x256 pixels')

    header[3] = 3  # 修改图像数据的最高有效位 (MSB) (0x00000803)
    data_image = header + data_image

    # 打开并写入图像数据文件
    output_file = open(name[1] + '-images-idx3-ubyte', 'wb')
    data_image.tofile(output_file)
    output_file.close()

    # 打开并写入标签数据文件
    output_file = open(name[1] + '-labels-idx1-ubyte', 'wb')
    data_label.tofile(output_file)
    output_file.close()

# 压缩生成的文件
for name in Names:
    os.system('gzip ' + name[1] + '-images-idx3-ubyte')
    os.system('gzip ' + name[1] + '-labels-idx1-ubyte')

到这可以恭喜你已经拿到了你自己的类mnist数据集了,可以去尽情的使用了。

相关推荐
千里念行客2401 分钟前
昂瑞微正式启动科创板IPO发行
人工智能·科技·信息与通信·射频工程
撸码猿12 分钟前
《Python AI入门》第10章 拥抱AIGC——OpenAI API调用与Prompt工程实战
人工智能·python·aigc
c***979835 分钟前
Web3.0在去中心化金融中的智能合约
金融·web3·去中心化
双翌视觉1 小时前
双翌全自动影像测量仪:以微米精度打造智能化制造
人工智能·机器学习·制造
编程小白_正在努力中1 小时前
神经网络深度解析:从神经元到深度学习的进化之路
人工智能·深度学习·神经网络·机器学习
无风听海2 小时前
神经网络之经验风险最小化
人工智能·深度学习·神经网络
音视频牛哥2 小时前
轻量级RTSP服务的工程化设计与应用:从移动端到边缘设备的实时媒体架构
人工智能·计算机视觉·音视频·音视频开发·rtsp播放器·安卓rtsp服务器·安卓实现ipc功能
该用户已不存在2 小时前
在 Gemini CLI 中使用 Gemini 3 Pro 实操指南
人工智能·ai编程·gemini
东皇太星3 小时前
ResNet (2015)(卷积神经网络)
人工智能·神经网络·cnn
aircrushin3 小时前
TRAE SOLO 中国版,正式发布!AI 编程的 "Solo" 时代来了?
前端·人工智能