Python 如何在tensorflow_数据集加载的数据集中分别加载图像和标签 将tensorflow_数据集导入为TFD 列车ds=tfds.load('cifar100',split='train[:90%]')。shuffle(1024)。批处理(32) val_ds=tfds.load('cifar100',split='train[-10%:]')。shuffle(1024)。批处理(32)
我想把Python 如何在tensorflow_数据集加载的数据集中分别加载图像和标签 将tensorflow_数据集导入为TFD 列车ds=tfds.load('cifar100',split='train[:90%]')。shuffle(1024)。批处理(32) val_ds=tfds.load('cifar100',split='train[-10%:]')。shuffle(1024)。批处理(32),python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,我想把train\u ds和val\u ds转换成这样的东西:x\u train,y\u train和x\u val,y\u val(x代表图像,y代表标签)。 KerasAPI使用训练和测试数据分割(在sklearn中似乎也是如此),但我不想在这里使用任何测试数据 我尝试过这个方法,但没有成功(我确实理解为什么不成功,但我不知道如何将我的训练数据转换为图像和标签): x\u train=train\u ds['image'] #TypeError:“BatchDataset”对象不可下标 这不
train\u ds
和val\u ds
转换成这样的东西:x\u train,y\u train
和x\u val,y\u val
(x代表图像,y代表标签)。
KerasAPI使用训练和测试数据分割(在sklearn中似乎也是如此),但我不想在这里使用任何测试数据
我尝试过这个方法,但没有成功(我确实理解为什么不成功,但我不知道如何将我的训练数据转换为图像和标签):
x\u train=train\u ds['image']
#TypeError:“BatchDataset”对象不可下标
这不是最好的方法,我先创建列表来检查它们。我想你想要的是:
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'])
功能\u标签
是一本字典:
features_labels.keys()
dict_keys(['image', 'label'])
之后,可以将它们转换为numpy
数组
x_train = np.array(x_train, dtype = 'float32')
y_train = np.array(y_train, dtype = 'float32')
我找到了一个更好的解决方案:
train\u ds,val\u ds=tfds.load(name=“cifar100”,拆分=('train[:90%],'train[-10%:]',批次大小=-1,as\u supervised=True)
x\u列,y\u列=tfds.as\u numpy(列数据)
x_val,y_val=tfds.as_numpy(val\u数据)
回答您的问题?我尝试了所有建议的解决方案,但我一直遇到这样的错误ValueError:太多的值无法解包(预期为2)
我认为该问题中的问题与我这里的问题不同。我使用了您的方法,但与Keras API加载的列车数据相比:(x_train_keras,y_train_keras),(x_test_keras,y_test_keras)=cifar100.加载数据()y_train_keras==y_train数组([[False,False,False,False,False,False,False],[False,False,False,False],[False,False,False,False,False],[假,假,假,…,假,假,假],[假,假,假,…,假,假,假]]
它们的顺序可能不一样。我检查了形状,它们是一样的。这也是我的想法,但我没有洗牌我的数据,所以我想知道为什么顺序不同。另外,由于某种原因,我无法将最终数组转换为float32。我发现这是由于导入期间批量处理数据造成的。谢谢帮助!