You need to enable JavaScript to run this app. 如何使用TFDS筛选MNIST数据集中单个标签类别的图像?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TFDS筛选MNIST数据集中单个标签类别的图像?

问题原因说明

你混淆了本地按类别分类的文件夹结构和TFDS加载返回的数据集结构:ds['One']的写法是假设数据集是按类别名索引的字典,但实际通过tfds加载的MNIST训练集返回的是tf.data.Dataset迭代对象,每个迭代元素是包含image(图像张量)和label(0~9的整数标签,数字1对应标签值为1)两个键的字典,因此这种写法无法生效。

正确实现方法

直接调用tf.data.Dataset内置的filter方法按标签值过滤即可:

import tensorflow as tf
import tensorflow_datasets as tfds

builder = tfds.builder('mnist')
builder.download_and_prepare()
ds = builder.as_dataset(split='train', shuffle_files=True)

# 筛选所有标签为1的样本
ds_one_label = ds.filter(lambda sample: sample['label'] == 1)

# 仅提取图像字段(可选,适配GAN训练的输入要求)
ds_one_image = ds_one_label.map(lambda sample: sample['image'])

效果验证

MNIST训练集中标签为1的样本总数为6742,你可以执行以下代码验证筛选结果是否正确:

print(ds_one_label.cardinality().numpy())
# 输出结果应为 6742

GAN训练适配预处理示例

如果需要直接用于GAN训练,你可以在筛选后追加预处理、分批、预加载逻辑:

def preprocess(image):
    # 将像素值从[0,255]缩放到[-1,1],适配GAN常用的tanh激活输出
    return (tf.cast(image, tf.float32) / 127.5) - 1.0

train_ds = ds_one_image.map(preprocess)\
                       .shuffle(buffer_size=6000)\
                       .batch(batch_size=64)\
                       .prefetch(buffer_size=tf.data.AUTOTUNE)

内容的提问来源于stack exchange,提问作者user11145590

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 10:57:03