이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

TensorFlow 데이터 세트

TFDS는 TensorFlow, Jax 및 기타 기계 학습 프레임 워크와 함께 사용할 준비가 된 데이터 세트 모음을 제공합니다.

결정적으로 데이터를 다운로드하고 준비하고 tf.data.Dataset (또는 np.array )을 구성합니다.

TensorFlow.org에서보기 Google Colab에서 실행 GitHub에서 소스보기

설치

TFDS는 두 가지 패키지로 존재합니다.

  • pip install tensorflow-datasets : 몇 달에 한 번씩 출시되는 안정적인 버전입니다.
  • pip install tfds-nightly : pip install tfds-nightly 릴리스되며 데이터 세트의 마지막 버전을 포함합니다.

이 colab은 tfds-nightly 사용합니다.

pip install -q tfds-nightly tensorflow matplotlib
WARNING: You are using pip version 20.2.3; however, version 20.2.4 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

사용 가능한 데이터 세트 찾기

모든 데이터 세트 빌더는 tfds.core.DatasetBuilder 하위 클래스입니다. 사용 가능한 빌더 목록을 얻으려면 tfds.list_builders() 하거나 카탈로그를 참조하십시오 .

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',
 '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',
 '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',
 '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_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']

데이터 세트로드

데이터 세트를로드하는 가장 쉬운 방법은 tfds.load 입니다. 그것은 :

  1. 데이터를 다운로드하고 tfrecord 파일로 저장합니다.
  2. 로드 tfrecord 하고 만들 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}>

몇 가지 일반적인 주장 :

  • split= : 읽을 분할 (예 : 'train' , ['train', 'test'] , 'train[80%:]' , ...). 분할 API 가이드를 참조하세요.
  • shuffle_files= : 각 세대 사이에 파일을 섞을 지 여부를 제어합니다 (TFDS는 큰 데이터 세트를 여러 개의 작은 파일에 저장합니다).
  • data_dir= : 데이터 세트가 저장된 위치 (기본값은 ~/tensorflow_datasets/ )
  • with_info=True : 데이터 세트 메타 데이터를 포함하는 tfds.core.DatasetInfo 를 반환합니다.
  • download=False : 다운로드 비활성화

tfds.load 주위에 얇은 래퍼입니다 tfds.core.DatasetBuilder . tfds.core.DatasetBuilder API를 사용하여 동일한 출력을 얻을 수 있습니다.

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

데이터 세트 반복

dict로

기본적으로 tf.data.Dataset 객체에는 tf.Tensordict 이 포함됩니다.

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)

튜플 ( as_supervised=True )

as_supervised=True 를 사용하면 감독되는 데이터 세트 대신 튜플 (features, label) 얻을 수 있습니다.

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)

numpy로 ( tfds.as_numpy )

tfds.as_numpy 를 사용 tfds.as_numpy 을 변환합니다.

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

일괄 처리 된 tf.Tensor ( batch_size=-1 )

batch_size=-1 을 사용하면 전체 데이터 세트를 단일 일괄 처리로로드 할 수 있습니다.

tfds.loadtf.Tensor ( np.array 사용하는 tfds.as_numpy )의 dict ( as_supervised=True tuple 를 반환합니다.

데이터 세트가 메모리에 맞을 수 있고 모든 예제가 동일한 모양을 갖도록주의하십시오.

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)

종단 간 파이프 라인 구축

더 나아가려면 다음을 볼 수 있습니다.

심상

tfds.as_dataframe

tf.data.Dataset 객체로 변환 할 수 pandas.DataFrametfds.as_dataframe 에 가시화 될 Colab .

  • 추가 tfds.core.DatasetInfo 의 두 번째 인수로 tfds.as_dataframe 이미지, 오디오, 텍스트, 동영상을 시각화 ...
  • ds.take(x) 를 사용하여 처음 x 예제 만 표시합니다. pandas.DataFrame 은 메모리 내 전체 데이터 세트를로드하며 표시하는 데 비용이 많이들 수 있습니다.
ds, info = tfds.load('mnist', split='train', with_info=True)

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

tfds.show_examples

tfds.show_examples 이미지의 tfds.show_examples (현재 이미지 데이터 세트 만 지원됨) :

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

fig = tfds.show_examples(ds, info)

png

데이터 세트 메타 데이터에 액세스

모든 빌더에는 데이터 세트 메타 데이터가 포함 된 tfds.core.DatasetInfo 개체가 포함됩니다.

다음을 통해 액세스 할 수 있습니다.

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

데이터 세트 정보에는 데이터 세트에 대한 추가 정보 (버전, 인용, 홈페이지, 설명, ...)가 포함됩니다.

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=,
)


기능 메타 데이터 (라벨 이름, 이미지 모양, ...)

tfds.features.FeatureDict 액세스합니다.

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

클래스 수, 레이블 이름 :

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

모양, dtypes :

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

분할 메타 데이터 (예 : 분할 이름, 예 수 등)

tfds.core.SplitDict 액세스합니다.

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

사용 가능한 분할 :

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

개별 분할에 대한 정보 얻기 :

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

또한 subsplit API와 함께 작동합니다.

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)]

소환

논문에 tensorflow-datasets 를 사용하는 경우 사용 된 데이터 세트 ( 데이터 세트 카탈로그 에서 찾을 수 있음)와 관련된 모든 인용과 함께 다음 인용을 포함하세요.

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