TFDS menyediakan kumpulan set data yang siap digunakan untuk digunakan dengan TensorFlow, Jax, dan framework Machine Learning lainnya.
Ini menangani mengunduh dan menyiapkan data secara deterministik dan membanguntf.data.Dataset
(atau np.array
).
![]() | ![]() | ![]() | ![]() |
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
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 subkelas dari tfds.core.DatasetBuilder
. Untuk mendapatkan daftar pembangun yang tersedia, gunakan tfds.list_builders()
atau lihat katalog kami.
tfds.list_builders()
['abstract_reasoning', 'accentdb', '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', 'cherry_blossoms', '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', 'dart', 'davis', 'deep_weeds', 'definite_pronoun_resolution', 'dementiabank', 'diabetic_retinopathy_detection', 'div2k', 'dmlab', 'downsampled_imagenet', 'drop', 'dsprites', 'dtd', 'duke_ultrasound', 'e2e_cleaned', 'efron_morris75', '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', 'gref', 'groove', 'gtzan', 'gtzan_music_speech', 'hellaswag', 'higgs', 'horses_or_humans', 'howell', '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', 'lambada', 'lfw', 'librispeech', 'librispeech_lm', 'libritts', 'ljspeech', 'lm1b', 'lost_and_found', 'lsun', 'lvis', 'malaria', 'math_dataset', 'mctaco', 'mlqa', 'mnist', 'mnist_corrupted', 'movie_lens', 'movie_rationales', 'movielens', 'moving_mnist', 'multi_news', 'multi_nli', 'multi_nli_mismatch', 'natural_questions', 'natural_questions_open', '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', 'piqa', 'places365_small', 'plant_leaves', 'plant_village', 'plantae_k', 'qa4mre', 'qasc', 'quac', 'quickdraw_bitmap', 'race', 'radon', 'reddit', 'reddit_disentanglement', 'reddit_tifu', 'resisc45', 'robonet', 'rock_paper_scissors', 'rock_you', 's3o4d', 'salient_span_wikipedia', 'samsum', 'savee', 'scan', 'scene_parse150', 'scicite', 'scientific_papers', 'sentiment140', 'shapes3d', 'siscore', 'smallnorb', 'snli', 'so2sat', 'speech_commands', 'spoken_digit', 'squad', 'stanford_dogs', 'stanford_online_products', 'star_cfq', 'starcraft_video', 'stl10', 'story_cloze', 'sun397', 'super_glue', 'svhn_cropped', 'tao', '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_nlg', 'web_questions', 'wider_face', 'wiki40b', 'wiki_bio', 'wiki_table_questions', 'wiki_table_text', 'wikihow', 'wikipedia', 'wikipedia_toxicity_subtypes', 'wine_quality', 'winogrande', 'wmt13_translate', 'wmt14_translate', 'wmt15_translate', 'wmt16_translate', 'wmt17_translate', 'wmt18_translate', 'wmt19_translate', 'wmt_t2t_translate', 'wmt_translate', 'wordnet', 'wsc273', 'xnli', 'xquad', 'xsum', 'xtreme_pawsx', 'xtreme_xnli', 'yelp_polarity_reviews', 'yes_no', 'youtube_vis']
Muat set data
tfds.load
Cara termudah untuk memuat tfds.load
data adalah tfds.load
. Itu akan:
- Unduh data dan simpan sebagai file
tfrecord
. - Muat
tfrecord
dan buattf.data.Dataset
.
ds = tfds.load('mnist', split='train', shuffle_files=True)
assert isinstance(ds, tf.data.Dataset)
print(ds)
<_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 epoch (TFDS menyimpan kumpulan data besar dalam beberapa file yang lebih kecil). -
data_dir=
: Lokasi tempat dataset disimpan (default ke~/tensorflow_datasets/
) -
with_info=True
: Mengembalikantfds.core.DatasetInfo
berisi metadatatfds.core.DatasetInfo
data -
download=False
: Nonaktifkan download
tfds.builder
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}>
tfds build
CLI
Jika Anda ingin membuat kumpulan data tertentu, Anda dapat menggunakan baris perintah tfds
. Sebagai contoh:
tfds build mnist
Lihat dokumen untuk bendera yang tersedia.
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)
Untuk mengetahui nama kunci dan struktur dict
, lihat dokumentasi set data di katalog kami . Misalnya: dokumentasi mnist .
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:
-
tf.Tensor
->np.array
tf.data.Dataset
->Iterator[Tree[np.array]]
(Tree
bisa sembarang bertingkatDict
,Tuple
)
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 batched tf.Tensor ( batch_size=-1
)
Dengan menggunakan batch_size=-1
, Anda dapat memuat batch_size=-1
data lengkap dalam satu batch.
Ini bisa digabungkan dengan as_supervised=True
dan tfds.as_numpy
untuk mendapatkan data sebagai (np.array, np.array)
:
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)
Berhati-hatilah agar kumpulan data Anda dapat masuk ke dalam memori, dan semua contoh memiliki bentuk yang sama.
Benchmark set data Anda
Pembandingan tfds.benchmark
data adalah panggilan tfds.benchmark
sederhana pada setiap iterable (misalnyatf.data.Dataset
, tfds.as_numpy
, ...).
ds = tfds.load('mnist', split='train')
ds = ds.batch(32).prefetch(1)
tfds.benchmark(ds, batch_size=32)
tfds.benchmark(ds, batch_size=32) # Second epoch much faster due to auto-caching
************ Summary ************ Examples/sec (First included) 47889.92 ex/sec (total: 60000 ex, 1.25 sec) Examples/sec (First only) 110.24 ex/sec (total: 32 ex, 0.29 sec) Examples/sec (First excluded) 62298.08 ex/sec (total: 59968 ex, 0.96 sec) ************ Summary ************ Examples/sec (First included) 290380.50 ex/sec (total: 60000 ex, 0.21 sec) Examples/sec (First only) 2506.57 ex/sec (total: 32 ex, 0.01 sec) Examples/sec (First excluded) 309338.21 ex/sec (total: 59968 ex, 0.19 sec)
- Jangan lupa untuk menormalkan hasil per ukuran batch dengan
batch_size=
kwarg. - Singkatnya, kumpulan pemanasan pertama dipisahkan dari yang lain untuk menangkap waktu penyiapan tambahan
tf.data.Dataset
(misalnya inisialisasi buffer, ...). - Perhatikan bagaimana iterasi kedua jauh lebih cepat karena TFDS auto-caching .
-
tfds.benchmark
mengembalikantfds.core.BenchmarkResult
yang dapat diperiksa untuk analisis lebih lanjut.
Bangun pipeline ujung ke ujung
Untuk melangkah lebih jauh, Anda dapat melihat:
- Contoh Keras ujung ke ujung kami untuk melihat pipeline pelatihan lengkap (dengan pengelompokan, pengacakan, ...).
- Panduan kinerja kami untuk meningkatkan kecepatan pipeline Anda (tip: gunakan
tfds.benchmark(ds)
untuk mengukurtfds.benchmark(ds)
data Anda).
Visualisasi
tfds.as_dataframe
Objektf.data.Dataset
dapat diubah menjadi pandas.DataFrame
dengan tfds.as_dataframe
untuk divisualisasikan di Colab .
- Tambahkan
tfds.core.DatasetInfo
sebagai argumen keduatfds.as_dataframe
untuk memvisualisasikan gambar, audio, teks, video, ... - Gunakan
ds.take(x)
untuk hanya menampilkan contohx
pertama.pandas.DataFrame
akan memuatpandas.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
tfds.show_examples
mengembalikan matplotlib.figure.Figure
(hanya tfds.show_examples
data gambar yang didukung sekarang):
ds, info = tfds.load('mnist', split='train', with_info=True)
fig = tfds.show_examples(ds, info)
Akses metadata set data
Semua pembuat menyertakan objek tfds.core.DatasetInfo
berisi metadata tfds.core.DatasetInfo
data.
Itu dapat diakses melalui:
- API
tfds.load
:
ds, info = tfds.load('mnist', with_info=True)
- API
tfds.core.DatasetBuilder
:
builder = tfds.builder('mnist')
info = builder.info
.dllInfo dataset berisi informasi tambahan tentang dataset (versi, kutipan, homepage, deskripsi, ...).
print(info)
tfds.core.DatasetInfo( name='mnist', full_name='mnist/3.0.1', description=""" The MNIST database of handwritten digits. """, homepage='http://yann.lecun.com/exdb/mnist/', data_path='gs://tensorflow-datasets/datasets/mnist/3.0.1', download_size=11.06 MiB, dataset_size=21.00 MiB, features=FeaturesDict({ 'image': Image(shape=(28, 28, 1), dtype=tf.uint8), 'label': ClassLabel(shape=(), dtype=tf.int64, num_classes=10), }), supervised_keys=('image', 'label'), splits={ 'test': <SplitInfo num_examples=10000, num_shards=1>, 'train': <SplitInfo num_examples=60000, num_shards=1>, }, 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} }""", )
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': <SplitInfo num_examples=10000, num_shards=1>, 'train': <SplitInfo num_examples=60000, num_shards=1>}
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
Ini 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)]
Penyelesaian masalah
Download manual (jika download gagal)
Jika unduhan gagal karena beberapa alasan (mis. Offline, ...). Anda selalu dapat mengunduh data sendiri secara manual dan menempatkannya di manual_dir
(defaultnya ke ~/tensorflow_datasets/download/manual/
.
Untuk mengetahui url mana yang akan diunduh, lihat:
Untuk dataset baru (diimplementasikan sebagai folder):
tensorflow_datasets/
<type>/<dataset_name>/checksums.tsv
. Misalnya:tensorflow_datasets/text/bool_q/checksums.tsv
.Anda dapat menemukan lokasi sumber set data di katalog kami .
Untuk
tensorflow_datasets/url_checksums/<dataset_name>.txt
data lama:tensorflow_datasets/url_checksums/<dataset_name>.txt
Memperbaiki NonMatchingChecksumError
TFDS memastikan determinisme dengan memvalidasi checksum url yang diunduh. Jika NonMatchingChecksumError
dimunculkan, mungkin menunjukkan:
- Situs web mungkin tidak aktif (mis.
503 status code
). Silakan periksa url. - Untuk URL Google Drive, coba lagi nanti karena Drive terkadang menolak unduhan jika terlalu banyak orang yang mengakses URL yang sama. Lihat bug
- File set data asli mungkin telah diperbarui. Dalam hal ini pembuat set data TFDS harus diperbarui. Silakan buka masalah atau PR Github baru:
- Daftarkan checksum baru dengan
tfds build --register_checksums
- Akhirnya perbarui kode pembuatan set data.
- Perbarui kumpulan data
VERSION
- Perbarui kumpulan data
RELEASE_NOTES
: Apa yang menyebabkan checksum berubah? Apakah beberapa contoh berubah? - Pastikan dataset masih bisa dibangun.
- Kirimkan kami PR
- Daftarkan checksum baru dengan
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} },
}