このページは Cloud Translation API によって翻訳されました。
Switch to English

データセットのバージョン管理

セマンティック

DatasetBuilder定義されているすべてのDatasetBuilderには、次のようなバージョンが付属しています。

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

バージョンはセマンティックバージョニング2.0.0に MAJOR.MINOR.PATCHますMAJOR.MINOR.PATCH 。バージョンの目的は、再現性を保証できるようにすることです。特定のデータセットを固定バージョンでロードすると、同じデータが生成されます。すなわち:

  • PATCHバージョンがインクリメントされている場合、データはディスク上で異なるようにシリアル化されているか、メタデータが変更されている可能性がありますが、クライアントが読み取ったデータは同じです。任意のスライスについて、スライスAPIは同じレコードのセットを返します。
  • MINORバージョンがインクリメントされている場合、クライアントによって読み取られる既存のデータは同じですが、追加のデータ(各レコードの機能)があります。任意のスライスについて、スライスAPIは同じレコードのセットを返します。
  • MAJORバージョンがインクリメントされている場合、既存のデータが変更されているか、スライスAPIが特定のスライスに対して同じレコードセットを返すとは限りません。

TFDSライブラリにコード変更が行われ、そのコード変更がデータセットのシリアル化やクライアントによる読み取りに影響を与える場合、対応するビルダーバージョンは上記のガイドラインに従って増分されます。

上記のセマンティクスは最善の努力であり、バージョンがインクリメントされていない間にデータセットに影響を与える気づかないバグがあるかもしれないことに注意してください。このようなバグは最終的には修正されますが、バージョン管理に大きく依存している場合は、( HEADではなく)リリースバージョンのTFDSを使用することをお勧めします。

また、一部のデータセットには、TFDSバージョンから独立した別のバージョン管理スキームがあることに注意してください。たとえば、Open Imagesデータセットにはいくつかのバージョンがあり、TFDSでは、対応するビルダーはopen_images_v4open_images_v5 、...です。

サポートされているバージョン

DatasetBuilderはいくつかのバージョンをサポートできます。これらのバージョンは、正規バージョンよりも高い場合も低い場合もあります。例えば:

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

古いバージョンのサポートを継続するかどうかの選択は、主にデータセットとバージョンの人気に基づいて、ケースバイケースで行われます。最終的には、データセットごとに限られた数のバージョン、理想的には1つのバージョンのみをサポートすることを目指しています。上記の例では、リーダーの観点から見ると、 2.0.1と同じようにバージョン2.0.0がサポートされていないことがわかります。

正規のバージョン番号よりも大きい番号のサポートされているバージョンは、実験的なものと見なされ、壊れている可能性があります。ただし、最終的には正規化されます。

バージョンはtfds_version_to_prepareを指定できます。つまり、このデータセットバージョンは、TFDSコードの現在のバージョンでのみ使用できます。これは、古いバージョンのコードによって既に準備されているが、準備できない場合です。 tfds_version_to_prepareの値は、このバージョンでデータセットをダウンロードして準備するために使用できる、TFDSの最後の既知のバージョンを指定します。

特定のバージョンをロードする

データセットまたはDatasetBuilderロードするときに、使用するバージョンを指定できます。例えば:

 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.*.*')
 

出版物にTFDSを使用する場合は、次のことをお勧めします。

  • バージョンのMAJORコンポーネントのみを修正します。
  • 結果で使用されたデータセットのバージョンを宣伝します。

そうすることで、将来の自分、読者、およびレビュアーが結果を再現しやすくなります。

実験

多くのデータセットビルダーに影響を与えるTFDSの変更を段階的に展開するために、実験の概念を導入しました。最初に導入されたとき、実験はデフォルトで無効になっていますが、特定のデータセットのバージョンで有効にすることができます。これは通常、「将来の」バージョン(まだ標準化されていない)で最初に行われます。例えば:

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

テストが期待どおりに動作することが確認されると、すべてまたはほとんどのデータセットに拡張されます。この時点で、デフォルトで有効にでき、上記の定義は次のようになります。

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

すべてのデータセットバージョンで実験を使用すると( {experiment: False}指定したデータセットバージョンが残っていない)、実験を削除できます。

実験とその説明は、 core/utils/version.py定義されています。

BUILDER_CONFIGSとバージョン

一部のデータセットは、いくつかのBUILDER_CONFIGS定義していBUILDER_CONFIGS 。その場合、 versionsupported_versionsはconfigオブジェクト自体で定義されます。それ以外は、セマンティクスと使用法は同じです。例えば:

 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.*.*')