我对Tensorflow数据集感兴趣,但是我想使用numpy
对其进行操作。可以将这个PrefetchDataset
变成一个数组吗?
import tensorflow_datasets as tfds
import numpy as np
dataset = tfds.load('mnist')
答案 0 :(得分:0)
由于未指定split
或as_supervised
,因此tfds
将返回设置了train
和test
的字典。由于as_supervised
默认为False
,因此image
和label
在字典中也将分开。它将是这样的:
{'test': <PrefetchDataset shapes: {image: (28, 28, 1), label: ()},
types: {image: tf.uint8, label: tf.int64}>,
'train': <PrefetchDataset shapes: {image: (28, 28, 1), label: ()},
types: {image: tf.uint8, label: tf.int64}>}
因此,这是将其转换为numpy
数组的方法:
import tensorflow_datasets as tfds
import numpy as np
dataset = tfds.load('mnist')
train, test = dataset['train'], dataset['test']
train_numpy = np.vstack(tfds.as_numpy(test))
test_numpy = np.vstack(tfds.as_numpy(test))
X_train = np.array(list(map(lambda x: x[0]['image'], train_numpy)))
y_train = np.array(list(map(lambda x: x[0]['label'], train_numpy)))
X_test = np.array(list(map(lambda x: x[0]['image'], test_numpy)))
y_test = np.array(list(map(lambda x: x[0]['label'], test_numpy)))
您可能想要设置as_supervised=True
,它将返回tuple
而不是image
和label
的字典。
[<PrefetchDataset shapes: ((28, 28, 1), ()), types: (tf.uint8, tf.int64)>]
在这种情况下,您将需要使用[0]
之类的索引来选择“图像”和“标签”。因此,这是将其转换为numpy
数组的方法:
import tensorflow_datasets as tfds
import numpy as np
dataset = tfds.load('mnist', split=['test'], as_supervised=True)
array = np.vstack(tfds.as_numpy(dataset[0]))
X_train = np.array(list(map(lambda x: x[0], array)))
y_train = np.array(list(map(lambda x: x[1], array)))
证明:
X_train.shape
(10000, 28, 28, 1)