این صفحه به‌وسیله ‏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 : هر روز منتشر می شود ، حاوی آخرین نسخه های مجموعه داده است.

این کولاب از 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 های 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 حاوی فراداده مجموعه داده را tfds.core.DatasetInfo گرداند
  • download=False : بارگیری را غیرفعال کنید

tfds.load یک لفاف نازک در اطراف tfds.core.DatasetBuilder . با استفاده از 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) یک tuple (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)

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.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_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

اشکال ، انواع مختلف:

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

استناد

اگر از tensorflow-datasets برای مقاله استفاده می کنید ، لطفاً نقل قول زیر را علاوه بر هر گونه استناد به مجموعه داده های استفاده شده (که در کاتالوگ مجموعه داده می توان یافت) ، ذکر کنید.

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