Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Set Data TensorFlow

TFDS menyediakan kumpulan set data yang siap digunakan untuk digunakan dengan TensorFlow, Jax, dan framework Machine Learning lainnya.

Ini menangani pengunduhan dan persiapan data secara deterministik dan membangun tf.data.Dataset (atau np.array ).

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub

Instalasi

TFDS ada dalam dua paket:

  • pip install tensorflow-datasets : Versi stabil, dirilis setiap beberapa bulan.
  • pip install tfds-nightly : Dirilis setiap hari, berisi versi terakhir dari kumpulan data.

Colab ini menggunakan tfds-nightly :

pip install -q tfds-nightly tensorflow matplotlib
WARNING: You are using pip version 20.2.2; however, version 20.2.3 is available.
You should consider upgrading via the '/tmpfs/src/tf_docs_env/bin/python -m pip install --upgrade pip' command.

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

import tensorflow_datasets as tfds

Temukan kumpulan data yang tersedia

Semua pembuat tfds.core.DatasetBuilder data adalah subclass dari tfds.core.DatasetBuilder . Untuk mendapatkan daftar pembangun yang tersedia, gunakan tfds.list_builders() atau lihat katalog kami.

tfds.list_builders()
['abstract_reasoning',
 'aeslc',
 'aflw2k3d',
 'ag_news_subset',
 'ai2_arc',
 'ai2_arc_with_ir',
 'amazon_us_reviews',
 'anli',
 'arc',
 'bair_robot_pushing_small',
 'bccd',
 'beans',
 'big_patent',
 'bigearthnet',
 'billsum',
 'binarized_mnist',
 'binary_alpha_digits',
 'blimp',
 'bool_q',
 'c4',
 'caltech101',
 'caltech_birds2010',
 'caltech_birds2011',
 'cars196',
 'cassava',
 'cats_vs_dogs',
 'celeb_a',
 'celeb_a_hq',
 'cfq',
 'chexpert',
 'cifar10',
 'cifar100',
 'cifar10_1',
 'cifar10_corrupted',
 'citrus_leaves',
 'cityscapes',
 'civil_comments',
 'clevr',
 'clic',
 'clinc_oos',
 'cmaterdb',
 'cnn_dailymail',
 'coco',
 'coco_captions',
 'coil100',
 'colorectal_histology',
 'colorectal_histology_large',
 'common_voice',
 'coqa',
 'cos_e',
 'cosmos_qa',
 'covid19sum',
 'crema_d',
 'curated_breast_imaging_ddsm',
 'cycle_gan',
 'deep_weeds',
 'definite_pronoun_resolution',
 'dementiabank',
 'diabetic_retinopathy_detection',
 'div2k',
 'dmlab',
 'downsampled_imagenet',
 'dsprites',
 'dtd',
 'duke_ultrasound',
 'emnist',
 'eraser_multi_rc',
 'esnli',
 'eurosat',
 'fashion_mnist',
 'flic',
 'flores',
 'food101',
 'forest_fires',
 'fuss',
 'gap',
 'geirhos_conflict_stimuli',
 'genomics_ood',
 'german_credit_numeric',
 'gigaword',
 'glue',
 'goemotions',
 'gpt3',
 'groove',
 'gtzan',
 'gtzan_music_speech',
 'higgs',
 'horses_or_humans',
 'i_naturalist2017',
 'imagenet2012',
 'imagenet2012_corrupted',
 'imagenet2012_real',
 'imagenet2012_subset',
 'imagenet_a',
 'imagenet_r',
 'imagenet_resized',
 'imagenet_v2',
 'imagenette',
 'imagewang',
 'imdb_reviews',
 'irc_disentanglement',
 'iris',
 'kitti',
 'kmnist',
 'lfw',
 'librispeech',
 'librispeech_lm',
 'libritts',
 'ljspeech',
 'lm1b',
 'lost_and_found',
 'lsun',
 'malaria',
 'math_dataset',
 'mctaco',
 'mnist',
 'mnist_corrupted',
 'movie_lens',
 'movie_rationales',
 'movielens',
 'moving_mnist',
 'multi_news',
 'multi_nli',
 'multi_nli_mismatch',
 'natural_questions',
 'newsroom',
 'nsynth',
 'nyu_depth_v2',
 'omniglot',
 'open_images_challenge2019_detection',
 'open_images_v4',
 'openbookqa',
 'opinion_abstracts',
 'opinosis',
 'opus',
 'oxford_flowers102',
 'oxford_iiit_pet',
 'para_crawl',
 'patch_camelyon',
 'paws_wiki',
 'paws_x_wiki',
 'pet_finder',
 'pg19',
 'places365_small',
 'plant_leaves',
 'plant_village',
 'plantae_k',
 'qa4mre',
 'qasc',
 'quickdraw_bitmap',
 'radon',
 'reddit',
 'reddit_disentanglement',
 'reddit_tifu',
 'resisc45',
 'robonet',
 'rock_paper_scissors',
 'rock_you',
 'salient_span_wikipedia',
 'samsum',
 'savee',
 'scan',
 'scene_parse150',
 'scicite',
 'scientific_papers',
 'sentiment140',
 'shapes3d',
 'smallnorb',
 'snli',
 'so2sat',
 'speech_commands',
 'spoken_digit',
 'squad',
 'stanford_dogs',
 'stanford_online_products',
 'starcraft_video',
 'stl10',
 'sun397',
 'super_glue',
 'svhn_cropped',
 'ted_hrlr_translate',
 'ted_multi_translate',
 'tedlium',
 'tf_flowers',
 'the300w_lp',
 'tiny_shakespeare',
 'titanic',
 'trec',
 'trivia_qa',
 'tydi_qa',
 'uc_merced',
 'ucf101',
 'vctk',
 'vgg_face2',
 'visual_domain_decathlon',
 'voc',
 'voxceleb',
 'voxforge',
 'waymo_open_dataset',
 'web_questions',
 'wider_face',
 'wiki40b',
 'wikihow',
 'wikipedia',
 'wikipedia_toxicity_subtypes',
 'wine_quality',
 'winogrande',
 'wmt14_translate',
 'wmt15_translate',
 'wmt16_translate',
 'wmt17_translate',
 'wmt18_translate',
 'wmt19_translate',
 'wmt_t2t_translate',
 'wmt_translate',
 'wordnet',
 'xnli',
 'xquad',
 'xsum',
 'yelp_polarity_reviews',
 'yes_no']

Muat set data

Cara termudah untuk memuat tfds.load data adalah tfds.load . Itu akan:

  1. Unduh data dan simpan sebagai file tfrecord .
  2. Muat tfrecord dan buat tf.data.Dataset .
ds = tfds.load('mnist', split='train', shuffle_files=True)
assert isinstance(ds, tf.data.Dataset)
print(ds)
WARNING:absl:Dataset mnist is hosted on GCS. It will automatically be downloaded to your
local data directory. If you'd instead prefer to read directly from our public
GCS bucket (recommended if you're running on GCP), you can instead pass
`try_gcs=True` to `tfds.load` or set `data_dir=gs://tfds-data/datasets`.


Downloading and preparing dataset mnist/3.0.1 (download: 11.06 MiB, generated: 21.00 MiB, total: 32.06 MiB) to /home/kbuilder/tensorflow_datasets/mnist/3.0.1...
Dataset mnist downloaded and prepared to /home/kbuilder/tensorflow_datasets/mnist/3.0.1. Subsequent calls will reuse this data.
<_OptionsDataset shapes: {image: (28, 28, 1), label: ()}, types: {image: tf.uint8, label: tf.int64}>

Beberapa argumen umum:

  • split= : Pembagian mana yang dibaca (mis. 'train' , ['train', 'test'] , 'train[80%:]' , ...). Lihat panduan API terpisah kami.
  • shuffle_files= : Kontrol apakah akan mengacak file di antara setiap periode (TFDS menyimpan kumpulan data besar dalam beberapa file yang lebih kecil).
  • data_dir= : Lokasi tempat dataset disimpan (default ke ~/tensorflow_datasets/ )
  • with_info=True : Mengembalikan tfds.core.DatasetInfo berisi metadata tfds.core.DatasetInfo data
  • download=False : Nonaktifkan download

tfds.load adalah pembungkus tipis di sekitar tfds.core.DatasetBuilder . Anda bisa mendapatkan keluaran yang sama menggunakan API tfds.core.DatasetBuilder :

builder = tfds.builder('mnist')
# 1. Create the tfrecord files (no-op if already exists)
builder.download_and_prepare()
# 2. Load the `tf.data.Dataset`
ds = builder.as_dataset(split='train', shuffle_files=True)
print(ds)
<_OptionsDataset shapes: {image: (28, 28, 1), label: ()}, types: {image: tf.uint8, label: tf.int64}>

Iterasi di atas kumpulan data

Sebagai dict

Secara default, tf.data.Dataset objek berisi dict dari tf.Tensor s:

ds = tfds.load('mnist', split='train')
ds = ds.take(1)  # Only take a single example

for example in ds:  # example is `{'image': tf.Tensor, 'label': tf.Tensor}`
  print(list(example.keys()))
  image = example["image"]
  label = example["label"]
  print(image.shape, label)
['image', 'label']
(28, 28, 1) tf.Tensor(4, shape=(), dtype=int64)

Sebagai tuple ( as_supervised=True )

Dengan menggunakan as_supervised=True , Anda bisa mendapatkan tuple (features, label) sebagai gantinya untuk set data yang diawasi.

ds = tfds.load('mnist', split='train', as_supervised=True)
ds = ds.take(1)

for image, label in ds:  # example is (image, label)
  print(image.shape, label)
(28, 28, 1) tf.Tensor(4, shape=(), dtype=int64)

Sebagai numpy ( tfds.as_numpy )

Menggunakan tfds.as_numpy untuk mengonversi:

ds = tfds.load('mnist', split='train', as_supervised=True)
ds = ds.take(1)

for image, label in tfds.as_numpy(ds):
  print(type(image), type(label), label)
<class 'numpy.ndarray'> <class 'numpy.int64'> 4

Sebagai tf.Tensor batch ( batch_size=-1 )

Dengan menggunakan batch_size=-1 , Anda dapat memuat batch_size=-1 data lengkap dalam satu batch.

tfds.load akan mengembalikan sebuah dict ( tuple dengan as_supervised=True ) dari tf.Tensor ( np.array dengan tfds.as_numpy ).

Berhati-hatilah karena kumpulan data Anda dapat masuk ke dalam memori, dan semua contoh memiliki bentuk yang sama.

image, label = tfds.as_numpy(tfds.load(
    'mnist',
    split='test', 
    batch_size=-1, 
    as_supervised=True,
))

print(type(image), image.shape)
<class 'numpy.ndarray'> (10000, 28, 28, 1)

Bangun pipeline ujung ke ujung

Untuk melangkah lebih jauh, Anda dapat melihat:

Visualisasi

tfds.as_dataframe

Objek tf.data.Dataset dapat diubah menjadi pandas.DataFrame dengan tfds.as_dataframe untuk divisualisasikan di Colab .

  • Tambahkan tfds.core.DatasetInfo sebagai argumen kedua tfds.as_dataframe untuk memvisualisasikan gambar, audio, teks, video, ...
  • Gunakan ds.take(x) untuk hanya menampilkan contoh x pertama. pandas.DataFrame akan memuat pandas.DataFrame data lengkap dalam memori, dan bisa sangat mahal untuk ditampilkan.
ds, info = tfds.load('mnist', split='train', with_info=True)

tfds.as_dataframe(ds.take(4), info)

tfds.show_examples

Untuk gambar dengan tfds.show_examples (sekarang hanya kumpulan data gambar yang didukung):

ds, info = tfds.load('mnist', split='train', with_info=True)

fig = tfds.show_examples(ds, info)

png

Akses metadata set data

Semua pembuat menyertakan objek tfds.core.DatasetInfo berisi metadata tfds.core.DatasetInfo data.

Itu dapat diakses melalui:

ds, info = tfds.load('mnist', with_info=True)
builder = tfds.builder('mnist')
info = builder.info

Info dataset berisi informasi tambahan tentang dataset (versi, kutipan, homepage, deskripsi, ...).

print(info)
tfds.core.DatasetInfo(
    name='mnist',
    version=3.0.1,
    description='The MNIST database of handwritten digits.',
    homepage='http://yann.lecun.com/exdb/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=,
)


Menampilkan metadata (nama label, bentuk gambar, ...)

Akses tfds.features.FeatureDict :

info.features
FeaturesDict({
    'image': Image(shape=(28, 28, 1), dtype=tf.uint8),
    'label': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),
})

Jumlah kelas, nama label:

print(info.features["label"].num_classes)
print(info.features["label"].names)
print(info.features["label"].int2str(7))  # Human readable version (8 -> 'cat')
print(info.features["label"].str2int('7'))
10
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
7
7

Bentuk, tipe:

print(info.features.shape)
print(info.features.dtype)
print(info.features['image'].shape)
print(info.features['image'].dtype)
{'image': (28, 28, 1), 'label': ()}
{'image': tf.uint8, 'label': tf.int64}
(28, 28, 1)
<dtype: 'uint8'>

Memisahkan metadata (misalnya nama terpisah, jumlah contoh, ...)

Akses tfds.core.SplitDict :

print(info.splits)
{'test': <tfds.core.SplitInfo num_examples=10000>, 'train': <tfds.core.SplitInfo num_examples=60000>}

Perpecahan yang tersedia:

print(list(info.splits.keys()))
['test', 'train']

Dapatkan info tentang pemisahan individu:

print(info.splits['train'].num_examples)
print(info.splits['train'].filenames)
print(info.splits['train'].num_shards)
60000
['mnist-train.tfrecord-00000-of-00001']
1

Ia juga bekerja dengan API subsplit:

print(info.splits['train[15%:75%]'].num_examples)
print(info.splits['train[15%:75%]'].file_instructions)
36000
[FileInstruction(filename='mnist-train.tfrecord-00000-of-00001', skip=9000, take=36000, num_examples=36000)]

Kutipan

Jika Anda menggunakan tensorflow-datasets untuk makalah, harap sertakan kutipan berikut, selain kutipan khusus untuk tensorflow-datasets yang digunakan (yang dapat ditemukan di katalog set data ).

@misc{TFDS,
  title = { {TensorFlow Datasets}, A collection of ready-to-use datasets},
  howpublished = {\url{https://www.tensorflow.org/datasets} },
}