【问题标题】:How to load images and labels seperately in a dataset loaded by tensorflow_datasets如何在 tensorflow_datasets 加载的数据集中分别加载图像和标签
【发布时间】:2021-05-25 00:37:18
【问题描述】:
import tensorflow_datasets as tfds

train_ds = tfds.load('cifar100', split='train[:90%]').shuffle(1024).batch(32)
val_ds = tfds.load('cifar100', split='train[-10%:]').shuffle(1024).batch(32)

我想将train_ds 和val_ds 转换成这样的形式:x_train, y_train 和x_val, y_val(x 代表图像,y 代表标签)。 Keras API 使用训练和测试数据拆分(sklearn 中似乎也是这种情况),但我确实不想在这里使用任何测试数据。

我试过这个,但没有用(我明白为什么这不起作用,但我不知道如何将我的训练数据转换为图像和标签):

x_train = train_ds['image']

# TypeError: 'BatchDataset' object is not subscriptable

【问题讨论】:

  • Does this回答你的问题?
  • 我尝试了所有建议的解决方案,但我一直遇到这个错误ValueError: too many values to unpack (expected 2)
  • 我认为该问题中提出的问题与我在这里的问题不同。

标签: python tensorflow machine-learning


【解决方案1】:

我找到了更好的解决方案:

train_ds, val_ds = tfds.load(name="cifar100", split=('train[:90%]','train[-10%:]'), batch_size=-1, as_supervised=True)

x_train, y_train = tfds.as_numpy(train_data)
x_val, y_val = tfds.as_numpy(val_data)

【讨论】:

    【解决方案2】:

    不是最好的方法,我首先创建了列表来检查它们。我想你想要这样的东西:

    train_ds = tfds.load('mnist', split='train[:90%]')
    
    train_examples_labels = tfds.as_numpy(train_ds)
    
    x_train = []
    y_train = []
    
    
    for features_labels in train_examples_labels:
        x_train.append(features_labels['image'])
        y_train.append(features_labels['label'])
    

    features_labels 是这里的字典:

    features_labels.keys()
    dict_keys(['image', 'label'])
    

    之后可以将它们转换成numpy 数组。

    x_train = np.array(x_train, dtype = 'float32')
    y_train = np.array(y_train, dtype = 'float32')
    

    【讨论】:

    • 我使用了你的方法,但与 Keras API 加载的火车数据相比:(x_train_keras, y_train_keras), (x_test_keras, y_test_keras) = cifar100.load_data() y_train_keras == y_train array([[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False]])
    • 它们的顺序可能不同。我检查了形状,它们是一样的。
    • 我也是这么想的,但我没有洗牌我的数据,所以我想知道为什么顺序不同
    • 另外,由于某种原因,我无法将最终数组转换为 float32
    • 我发现这是在导入过程中对数据进行批处理造成的。感谢您的帮助!
    猜你喜欢
    • 2020-12-11
    • 2020-12-08
    • 2020-09-07
    • 2020-12-24
    • 1970-01-01
    • 2021-06-03
    • 2017-12-24
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多