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 membanguntf.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
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',
 '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',
 'e2e_cleaned',
 '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',
 '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',
 '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',
 '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',
 'starcraft_video',
 'stl10',
 'story_cloze',
 '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_nlg',
 'web_questions',
 'wider_face',
 'wiki40b',
 'wiki_bio',
 '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',
 'wsc273',
 'xnli',
 'xquad',
 'xsum',
 'xtreme_pawsx',
 'xtreme_xnli',
 'yelp_polarity_reviews',
 'yes_no']

Muat set data

tfds.load

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

  1. Unduh data dan simpan sebagai file tfrecord .
  2. Muat tfrecord dan buattf.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 (misalnya '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 : Mengembalikan tfds.core.DatasetInfo berisi metadata tfds.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)

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 batched tf.Tensor ( 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

Objektf.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
.dll

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

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 ~/tensorflow_datasets/download/manual/ .

Untuk mengetahui url mana yang akan diunduh, lihat:

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 dataset 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

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} },
}