Поскольку вы не указали 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)