หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ชุดข้อมูล TensorFlow

TFDS มีชุดข้อมูลที่พร้อมใช้งานสำหรับใช้กับ TensorFlow, Jax และเฟรมเวิร์ก Machine Learning อื่น ๆ

จัดการการดาวน์โหลดและเตรียมข้อมูลโดยกำหนดและสร้าง tf.data.Dataset (หรือ np.array )

ดูใน TensorFlow.org เรียกใช้ใน Google Colab ดูแหล่งที่มาบน 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= : ควบคุมว่าจะสลับไฟล์ระหว่างแต่ละยุคหรือไม่ (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}>

วนซ้ำชุดข้อมูล

เป็นคำสั่ง

โดยค่าเริ่มต้น tf.data.Dataset วัตถุมี dict ของ 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)

เป็นทูเพิล ( as_supervised=True )

เมื่อใช้ as_supervised=True คุณจะได้รับ 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)

เป็น 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.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)

สร้างไปป์ไลน์แบบ end-to-end

หากต้องการไปเพิ่มเติมคุณสามารถดู:

การแสดงภาพ

tfds.as_dataframe

tf.data.Dataset object สามารถแปลงเป็น 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 ส่วนย่อย:

print(info.splits['train[15%:75%]'].num_examples)
print(info.splits['train[15%:75%]'].file_instructions)
6 อีบาบัด 53

การอ้างอิง

หากคุณกำลังใช้ tensorflow-datasets สำหรับกระดาษโปรดรวมการอ้างอิงต่อไปนี้นอกเหนือจากการอ้างอิงใด ๆ ที่เฉพาะเจาะจงสำหรับชุดข้อมูลที่ใช้ (ซึ่งสามารถพบได้ใน แค็ตตาล็อกชุดข้อมูล )

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