MNIST保存为本地图片

import os
import torchvision
import torchvision.transforms as transforms

# 下载MNIST数据集
transform = transforms.Compose([transforms.ToTensor()])
mnist_trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
mnist_testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
# 下载MNIST数据集

# 创建一个目录来保存图像(如果不存在的话)
os.makedirs('./mnist_images/train', exist_ok=True)
os.makedirs('./mnist_images/test', exist_ok=True)

# 遍历数据集,保存图像
for idx,(image,label) in enumerate(mnist_trainset):
    # 创建类别文件(如果不存在的话)
    label_dir = os.path.join('./mnist_images/train', str(label))
    os.makedirs(label_dir, exist_ok=True)
    # 转换为PIL格式,保存图像
    pil_image = transforms.ToPILImage()(image)
    pil_image.save(os.path.join(label_dir, f'{idx}.png'))

#遍历数据集,保存图像
for idx,(image,label) in enumerate(mnist_testset):
    # 创建类别文件(如果不存在的话)
    label_dir = os.path.join('./mnist_images/test', str(label))
    os.makedirs(label_dir, exist_ok=True)
    # 转换为PIL格式,保存图像
    pil_image = transforms.ToPILImage()(image)
    pil_image.save(os.path.join(label_dir, f'{idx}.png'))
    # 保存完毕

# 打印完成信息
print('MNIST images saved to ./mnist_images')```

### 如何在 R 中加载本地存储的 MNIST 数据集 要在 R 中加载本地存储的 MNIST 数据集,可以利用 `readBin` 函数来读取二进制文件并将其转换为矩阵形式。以下是具体实现方式: #### 加载 MNIST 数据集的方法 由于 MNIST 数据是以特定格式保存的二进制文件,因此需要手动解析这些文件的内容。可以通过以下代码片段完成这一操作[^3]。 ```r load_mnist <- function(images_file, labels_file) { read_labels <- function(file_path) { con <- file(file_path, "rb") magic_number <- readBin(con, integer(), size = 4, n = 1, endian = "big") length <- readBin(con, integer(), size = 4, n = 1, endian = "big") labels <- readBin(con, integer(), size = 1, n = length, signed = FALSE) close(con) return(labels) } read_images <- function(file_path) { con <- file(file_path, "rb") magic_number <- readBin(con, integer(), size = 4, n = 1, endian = "big") num_items <- readBin(con, integer(), size = 4, n = 1, endian = "big") rows <- readBin(con, integer(), size = 4, n = 1, endian = "big") cols <- readBin(con, integer(), size = 4, n = 1, endian = "big") images_vector <- readBin(con, integer(), size = 1, n = num_items * rows * cols, signed = FALSE) images_matrix <- matrix(as.numeric(images_vector), nrow = rows * cols, ncol = num_items, byrow = TRUE) close(con) return(t(images_matrix / 255)) # 归一化到 [0, 1] } train_labels <- read_labels(labels_file) train_images <- read_images(images_file) list(images = train_images, labels = train_labels) } # 调用函数加载数据 data_dir <- "./MNIST_data/" train_set <- load_mnist(paste0(data_dir, "train-images.idx3-ubyte"), paste0(data_dir, "train-labels.idx1-ubyte")) test_set <- load_mnist(paste0(data_dir, "t10k-images.idx3-ubyte"), paste0(data_dir, "t10k-labels.idx1-ubyte")) str(train_set$images) str(test_set$labels) ``` 此代码定义了一个名为 `load_mnist` 的函数,用于从指定路径加载图像和标签文件,并返回标准化后的像素值矩阵以及对应的类别标签向量[^3]。 #### 关键点说明 - **二进制文件结构**:MNIST 文件由魔数(magic number)、样本数量、图片尺寸等元信息组成,随后才是实际的数据部分。 - **归一化处理**:为了便于后续模型训练,通常会将像素值缩放到 `[0, 1]` 区间内。 - **内存管理**:通过关闭连接 (`close`) 防止资源泄漏。 尽管目前 R 中缺乏像 Python Keras 或 PyTorch 这样的高级框架支持直接加载 MNIST 数据集,但借助基础 I/O 和数组操作功能仍可轻松达成目标[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值