Как правильно манипулировать наборами данных tfds.load () в tenorflow 2.x? - PullRequest
0 голосов
/ 03 ноября 2019

Я изучаю, как создать модель MNIST с нуля в tenorflow 2.0 и Keras из курса Udemy.

Итак, я получил набор данных mnist следующим образом

mnist_dataset, mnist_info = tfds.load(name = 'mnist', with_info=True, as_supervised=True)
mnist_train, mnist_test = mnist_dataset['train'], mnist_dataset['test']

и всевсе было в порядке, даже если я тестировал свою модель на 97%, и я был счастлив.

Проблема началась, когда я попытался сделать что-то отличное от курса. Я попытался напечатать некоторые примеры из mnist_dataset, используя matplotlib plt.imshow(), и мне это не удалось. Затем я начал некоторые исследования и нашел решение, мне нужно было получить набор данных, подобный следующему:

mnist_dataset2 = tfds.load(name = 'mnist')
mnistt = mnist_dataset2['train']

, где mnistt - это набор данных, которыми я могу манипулировать и печатать, используя matplotlib.

Поэтому мой вопрос заключается в следующем: где я могу получить информацию о типах tfds.load (), которые вы можете получить, и о том, как правильно ими манипулировать, как вы хотите? (и быть несколько расширяемым от новичка в тензорном потоке, как я).

1 Ответ

0 голосов
/ 03 ноября 2019

Основной вызов метода tfds.load содержит все, что вам нужно:

mnist_dataset, mnist_info = tfds.load(name = 'mnist', with_info=True, as_supervised=True)
  • name="mnist" -> вы указываете конструктор, который хотите использовать (mnist)
  • with_info=True -> вы просите tfds.load вернуть info объект, содержащий все, что вам нужно знать о возвращенном наборе данных
  • as_supervised=True ->вы просите tfds.load получить только те элементы набора данных, которые необходимы для контролируемой учебной задачи (пара изображений и меток).

Ваша первая попытка использования mnist_dataset для получения данных(использовать с matplotlib) не удалось, поскольку, как вы можете видеть из

print(mnist_info) #run me!

Набор данных содержит 2 разных разбиения: train и test.

tfds.core.DatasetInfo(
    name='mnist',
    version=1.0.0,
    description='The MNIST database of handwritten digits.',
    urls=['https://storage.googleapis.com/cvdf-datasets/mnist/'],
    features=FeaturesDict({
        'image': Image(shape=(28, 28, 1), dtype=tf.uint8),
        'label': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),
    }),
    total_num_examples=70000,
    splits={
        'test': 10000,
        'train': 60000,
    },
    supervised_keys=('image', 'label'),
    citation="""@article{lecun2010mnist,
      title={MNIST handwritten digit database},
      author={LeCun, Yann and Cortes, Corinna and Burges, CJ},
      journal={ATT Labs [Online]. Available: http://yann. lecun. com/exdb/mnist},
      volume={2},
      year={2010}
    }""",
    redistribution_info=,
)

Таким образом,объект, возвращаемый tfds.load, является словарем :

{
   "train": <train dataset>,
   "test": <test dataset>
}

Фактически, в следующей строке примера вы извлекаете наборы данных "train" и "test" в этомway:

mnist_train, mnist_test = mnist_dataset['train'], mnist_dataset['test']

Из объекта mnist_info вы можете получить любую информацию, необходимую для манипулирования вашим набором данных: количество разбиений, датип ta (например, «изображение» - это изображение размером 28x28x1 с dtype tf.uint8) и т. д. *

...