如何在TensorFlow中加载本地数据集并将[0,255]图像缩放到[-1,1]
本地分目录自定义数据集替换内置Keras数据集方案
你现有预处理逻辑不需要大幅改动,只要实现一个和keras.datasets.fashion_mnist.load_data()返回格式完全一致的本地加载函数,就可以无缝替换内置数据集加载逻辑。
适配现有目录结构的加载实现
你的数据集已经按Train、Test拆分完成,如果目录下遵循「类别名子文件夹存放对应图片」的标准分类数据集结构(即Train/类别1/xxx.jpg、Train/类别2/xxx.jpg,Test目录同理),直接用Keras内置的目录读取工具即可,不需要额外安装依赖:
import numpy as np from tensorflow import keras # 按需修改配置 IMG_SIZE = (28, 28) # 和原Fashion MNIST输入尺寸对齐,可根据自己需求调整 COLOR_MODE = "grayscale" # 单通道灰度图用grayscale,彩色图改"rgb" DATASET_ROOT = "./LFW-A" # 你的数据集根目录路径 def load_data(): # 读取训练集 train_ds = keras.utils.image_dataset_from_directory( directory=f"{DATASET_ROOT}/Train", color_mode=COLOR_MODE, image_size=IMG_SIZE, batch_size=32, shuffle=False ) # 读取测试集 test_ds = keras.utils.image_dataset_from_directory( directory=f"{DATASET_ROOT}/Test", color_mode=COLOR_MODE, image_size=IMG_SIZE, batch_size=32, shuffle=False ) # 转换为和内置Fashion MNIST一致的numpy数组格式 # 训练集转换 train_x, train_y = [], [] for imgs, labels in train_ds: train_x.append(imgs.numpy()) train_y.append(labels.numpy()) train_x = np.concatenate(train_x, axis=0).astype("uint8") # 灰度图加载会自带单通道维度,和原MNIST格式对齐需要去掉冗余维度,彩色图注释掉下一行 train_x = train_x.squeeze(axis=-1) train_y = np.concatenate(train_y, axis=0) # 测试集转换 test_x, test_y = [], [] for imgs, labels in test_ds: test_x.append(imgs.numpy()) test_y.append(labels.numpy()) test_x = np.concatenate(test_x, axis=0).astype("uint8") # 灰度图加载会自带单通道维度,和原MNIST格式对齐需要去掉冗余维度,彩色图注释掉下一行 test_x = test_x.squeeze(axis=-1) test_y = np.concatenate(test_y, axis=0) return (train_x, train_y), (test_x, test_y)
使用说明
- 上述
load_data函数返回格式和内置Fashion MNIST完全一致,你原来写的load_real_samples预处理函数不需要任何修改,直接调用即可正常运行。 - 如果你用彩色RGB图片:把
COLOR_MODE改成"rgb",同时注释掉代码里两处squeeze(axis=-1)的逻辑,再删掉原预处理函数里的expand_dims步骤即可,因为RGB图片加载后自带3通道维度,不需要额外扩维。 - 如果你的Train/Test目录下没有按类别分子文件夹,所有图片直接存放在目录下:只需要自己补充标签匹配逻辑即可,比如从csv标注文件里按文件名匹配对应标签,最终保证返回的四个数组形状符合要求即可:
- 训练集图片
train_x形状:(训练样本数, 图片高度, 图片宽度) - 训练集标签
train_y形状:(训练样本数,) - 测试集图片
test_x形状:(测试样本数, 图片高度, 图片宽度) - 测试集标签
test_y形状:(测试样本数,)
- 训练集图片
- 需要打乱数据集的话,把
image_dataset_from_directory里的shuffle参数设为True,可以搭配seed参数固定随机种子保证结果可复现。
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

