You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:57:14