3.生成index.ubyte文件
这里我主要参考了 这篇博客,他们把这块的知识解释得很到位了,我这里也没什么补充的。主要是拿到训练集图片与标签的index_ubyte文件和测试集的图片与标签的index_ubyte文件。共四个文件。
非常感谢我的参考博客:
https://blog.csdn.net/qq_44042678/article/details/131631917?spm=1001.2014.3001.5506
直接上代码:文章来源:https://www.toymoban.com/news/detail-808054.html
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数据集了,可以去尽情的使用了。文章来源地址https://www.toymoban.com/news/detail-808054.html
到了这里,关于《如何制作类mnist的金融数据集》——3.生成index.ubyte文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!