Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Versi kumpulan data

Semantik

Setiap DatasetBuilder didefinisikan dalam TFDS hadir dengan versi, misalnya:

 class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version("1.0.0")
 

Versi ini mengikuti Semantic Versioning 2.0.0 : MAJOR.MINOR.PATCH . Tujuan dari versi ini adalah untuk dapat menjamin reproduktifitas: memuat dataset yang diberikan pada versi tetap menghasilkan data yang sama. Lebih spesifik:

  • Jika versi PATCH bertambah, data yang dibaca oleh klien adalah sama, meskipun data mungkin serial berbeda pada disk, atau metadata mungkin telah berubah. Untuk setiap irisan yang diberikan, slicing API mengembalikan set rekaman yang sama.
  • Jika versi MINOR bertambah, data yang ada seperti yang dibaca oleh klien adalah sama, tetapi ada data tambahan (fitur di setiap catatan). Untuk setiap irisan yang diberikan, slicing API mengembalikan set rekaman yang sama.
  • Jika versi MAJOR bertambah, data yang ada telah diubah dan / atau slicing API tidak serta merta mengembalikan set rekaman yang sama untuk irisan yang diberikan.

Ketika perubahan kode dibuat ke perpustakaan TFDS dan perubahan kode itu berdampak pada cara dataset diserialisasi dan / atau dibaca oleh klien, maka versi pembangun yang sesuai akan bertambah sesuai dengan pedoman di atas.

Perhatikan bahwa semantik di atas adalah upaya terbaik, dan mungkin ada bug yang tidak diperhatikan yang memengaruhi dataset sementara versinya tidak bertambah. Bug semacam itu akhirnya diperbaiki, tetapi jika Anda sangat bergantung pada versi, kami menyarankan Anda untuk menggunakan TFDS dari versi yang dirilis (sebagai lawan dari HEAD ).

Perhatikan juga bahwa beberapa dataset memiliki skema pembuatan versi lain yang independen dari versi TFDS. Misalnya, dataset Gambar Terbuka memiliki beberapa versi, dan dalam TFDS, pembangun terkait adalah open_images_v4 , open_images_v5 , ...

Versi yang didukung

DatasetBuilder dapat mendukung beberapa versi, yang bisa lebih tinggi atau lebih rendah dari versi kanonik. Sebagai contoh:

 class Imagenet2012(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version('2.0.1', 'Encoding fix. No changes from user POV')
  SUPPORTED_VERSIONS = [
      tfds.core.Version('3.0.0', 'S3: tensorflow.org/datasets/splits'),
      tfds.core.Version('1.0.0'),
      tfds.core.Version('0.0.9', tfds_version_to_prepare="v1.0.0"),
  ]
 

Pilihan untuk terus mendukung versi yang lebih lama dilakukan berdasarkan kasus per kasus, terutama berdasarkan popularitas dataset dan versi. Akhirnya, kami bertujuan hanya mendukung versi jumlah terbatas per dataset, idealnya satu. Dalam contoh di atas, kita dapat melihat bahwa versi 2.0.0 tidak didukung lagi, sama dengan 2.0.1 dari perspektif pembaca.

Versi yang didukung dengan angka yang lebih tinggi daripada nomor versi kanonik dianggap eksperimental dan mungkin rusak. Namun mereka akhirnya akan dibuat kanonik.

Versi dapat menentukan tfds_version_to_prepare . Ini berarti versi dataset ini hanya dapat digunakan dengan versi kode TFDS saat ini jika sudah disiapkan oleh versi kode yang lebih lama, tetapi tidak dapat disiapkan. Nilai tfds_version_to_prepare menentukan versi TFDS yang diketahui terakhir yang dapat digunakan untuk mengunduh dan menyiapkan dataset pada versi ini.

Memuat versi tertentu

Saat memuat dataset atau DatasetBuilder , Anda dapat menentukan versi yang akan digunakan. Sebagai contoh:

 tfds.load('imagenet2012:2.0.1')
tfds.builder('imagenet2012:2.0.1')

tfds.load('imagenet2012:2.0.0')  # Error: unsupported version.

# Resolves to 3.0.0 for now, but would resolve to 3.1.1 if when added.
tfds.load('imagenet2012:3.*.*')
 

Jika menggunakan TFDS untuk publikasi, kami sarankan Anda untuk:

  • memperbaiki komponen MAJOR dari versi saja ;
  • iklankan versi dataset mana yang digunakan dalam hasil Anda.

Melakukan hal itu seharusnya memudahkan diri Anda di masa depan, pembaca dan pengulas Anda untuk mereproduksi hasil Anda.

Eksperimen

Untuk secara bertahap meluncurkan perubahan pada TFDS yang memengaruhi banyak pembuat dataset, kami memperkenalkan gagasan tentang eksperimen. Saat pertama kali diperkenalkan, percobaan dinonaktifkan secara default, tetapi versi dataset tertentu dapat memutuskan untuk mengaktifkannya. Ini biasanya dilakukan pada versi "masa depan" (belum dibuat kanonik) pada awalnya. Sebagai contoh:

 class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version("1.0.0")
  SUPPORTED_VERSIONS = [
      tfds.core.Version("2.0.0", "EXP1: Opt-in for experiment 1",
                        experiments={tfds.core.Experiment.EXP1: True}),
  ]
 

Setelah percobaan diverifikasi untuk berfungsi seperti yang diharapkan, itu akan diperluas ke semua atau sebagian besar dataset, pada titik mana itu dapat diaktifkan secara default, dan definisi di atas kemudian akan terlihat seperti:

 class MNIST(tfds.core.GeneratorBasedBuilder):
  VERSION = tfds.core.Version("1.0.0",
                              experiments={tfds.core.Experiment.EXP1: False})
  SUPPORTED_VERSIONS = [
      tfds.core.Version("2.0.0", "EXP1: Opt-in for experiment 1"),
  ]
 

Setelah eksperimen digunakan di semua versi kumpulan data (tidak ada versi dataset yang menentukan {experiment: False} ), percobaan dapat dihapus.

Eksperimen dan deskripsinya didefinisikan dalam core/utils/version.py .

BUILDER_CONFIGS dan versi

Beberapa BUILDER_CONFIGS data mendefinisikan beberapa BUILDER_CONFIGS . Ketika itu terjadi, version dan version supported_versions didefinisikan pada objek konfigurasi itu sendiri. Selain itu, semantik dan penggunaannya identik. Sebagai contoh:

 class OpenImagesV4(tfds.core.GeneratorBasedBuilder):

  BUILDER_CONFIGS = [
      OpenImagesV4Config(
          name='original',
          version=tfds.core.Version('0.2.0'),
          supported_versions=[
            tfds.core.Version('1.0.0', "Major change in data"),
          ],
          description='Images at their original resolution and quality.'),
      ...
  ]

tfds.load('open_images_v4/original:1.*.*')