דף זה תורגם על ידי Cloud Translation API.
Switch to English

ערכות נתונים של TensorFlow

TFDS מספק אוסף של מערכי נתונים מוכנים לשימוש לשימוש עם TensorFlow, Jax ומסגרות למידת מכונה אחרות.

הוא מטפל בהורדה והכנת הנתונים באופן דטרמיניסטי ובניית tf.data.Dataset (או np.array ).

צפה ב- TensorFlow.org הפעל בגוגל קולאב צפה במקור ב- GitHub

הַתקָנָה

TFDS קיים בשתי חבילות:

  • pip install tensorflow-datasets : הגרסה היציבה, משוחררת אחת לכמה חודשים.
  • pip install tfds-nightly : יוצא מדי יום, מכיל את הגרסאות האחרונות של מערכי הנתונים.

Colab זה משתמש 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

מצא מערכי נתונים זמינים

כל בוני מערך הנתונים הם תת-מחלקה של tfds.core.DatasetBuilder . כדי לקבל את רשימת הבונים הזמינים, השתמש ב- tfds.list_builders() או עיין בקטלוג שלנו.

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

טען מערך נתונים

הדרך הקלה ביותר לטעון מערך נתונים היא 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= : shuffle_files= אם לדשדש את הקבצים בין כל תקופה (TFDS מאחסן מערכי נתונים גדולים בכמה קבצים קטנים יותר).
  • data_dir= : המיקום בו נשמר מערך הנתונים (ברירת המחדל היא ~/tensorflow_datasets/ )
  • with_info=True : מחזירה את tfds.core.DatasetInfo המכיל מטא נתונים של מערך נתונים
  • download=False : השבת את ההורדה

tfds.load הוא עטיפה דקה סביב tfds.core.DatasetBuilder . ניתן להשיג את אותה הפלט באמצעות ממשק ה- 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}>

חזר על מערך נתונים

ככתיב

כברירת מחדל, tf.data.Dataset אובייקט מכיל dict של tf.Tensor ים:

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)

כמו tuple ( 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)

כמו 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 )

באמצעות batch_size=-1 , באפשרותך לטעון את מערך הנתונים המלא באצווה אחת.

tfds.load יחזיר dict ( tuple עם as_supervised=True ) של tf.Tensor ( np.array עם tfds.as_numpy ).

היזהר שמערך הנתונים שלך יכול להשתלב בזיכרון, ושכל הדוגמאות יהיו באותה צורה.

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.DataFrame עם tfds.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_

לתמונה עם 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

צורות, סוגים:

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

זה עובד גם עם ממשק ה- 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} },
}