Trang này được dịch bởi Cloud Translation API.
Switch to English

Phiên bản dữ liệu

Ngữ nghĩa

Mỗi DatasetBuilder được xác định trong TFDS đi kèm với một phiên bản, ví dụ:

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

Phiên bản tuân theo Phiên bản ngữ nghĩa 2.0.0 : MAJOR.MINOR.PATCH . Mục đích của phiên bản là để có thể đảm bảo độ tái lập: tải một tập dữ liệu đã cho ở một phiên bản cố định mang lại cùng một dữ liệu. Cụ thể hơn:

  • Nếu phiên bản PATCH được tăng lên, dữ liệu do khách hàng đọc là như nhau, mặc dù dữ liệu có thể được tuần tự hóa khác nhau trên đĩa hoặc siêu dữ liệu có thể đã thay đổi. Đối với bất kỳ lát cắt cụ thể nào, API cắt sẽ trả về cùng một bộ hồ sơ.
  • Nếu phiên bản MINOR được tăng lên, dữ liệu hiện có do khách hàng đọc là như nhau, nhưng có dữ liệu bổ sung (tính năng trong mỗi bản ghi). Đối với bất kỳ lát cắt cụ thể nào, API cắt sẽ trả về cùng một bộ hồ sơ.
  • Nếu phiên bản MAJOR được tăng lên, dữ liệu hiện tại đã được thay đổi và / hoặc API cắt không nhất thiết phải trả về cùng một bộ hồ sơ cho một lát cắt nhất định.

Khi một thay đổi mã được thực hiện cho thư viện TFDS và thay đổi mã đó ảnh hưởng đến cách một tập dữ liệu được tuần tự hóa và / hoặc đọc bởi khách hàng, thì phiên bản trình tạo tương ứng được tăng lên theo các hướng dẫn ở trên.

Lưu ý rằng ngữ nghĩa trên là nỗ lực tốt nhất và có thể có các lỗi không được chú ý ảnh hưởng đến tập dữ liệu trong khi phiên bản không được tăng lên. Các lỗi như vậy cuối cùng đã được sửa, nhưng nếu bạn chủ yếu dựa vào phiên bản, chúng tôi khuyên bạn nên sử dụng TFDS từ phiên bản đã phát hành (trái ngược với HEAD ).

Cũng lưu ý rằng một số bộ dữ liệu có sơ đồ phiên bản khác độc lập với phiên bản TFDS. Ví dụ: bộ dữ liệu Open Images có một số phiên bản và trong TFDS, các trình xây dựng tương ứng là open_images_v4 , open_images_v5 , ...

Phiên bản được hỗ trợ

Một DatasetBuilder có thể hỗ trợ một số phiên bản, có thể cao hơn hoặc thấp hơn phiên bản chính tắc. Ví dụ:

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

Lựa chọn tiếp tục hỗ trợ một phiên bản cũ hơn được thực hiện trên cơ sở từng trường hợp, chủ yếu dựa trên mức độ phổ biến của bộ dữ liệu và phiên bản. Cuối cùng, chúng tôi chỉ nhắm đến việc hỗ trợ một số phiên bản giới hạn cho mỗi tập dữ liệu, lý tưởng nhất là một phiên bản. Trong ví dụ trên, chúng ta có thể thấy rằng phiên bản 2.0.0 không còn được hỗ trợ nữa, giống hệt với 2.0.1 từ góc độ người đọc.

Các phiên bản được hỗ trợ có số cao hơn số phiên bản chính tắc được coi là thử nghiệm và có thể bị hỏng. Tuy nhiên, cuối cùng họ sẽ được thực hiện kinh điển.

Một phiên bản có thể chỉ định tfds_version_to_prepare . Điều này có nghĩa là phiên bản dữ liệu này chỉ có thể được sử dụng với phiên bản mã TFDS hiện tại nếu nó đã được chuẩn bị bởi một phiên bản mã cũ hơn, nhưng không thể được chuẩn bị. Giá trị của tfds_version_to_prepare chỉ định phiên bản TFDS được biết đến cuối cùng có thể được sử dụng để tải xuống và chuẩn bị bộ dữ liệu tại phiên bản này.

Đang tải phiên bản cụ thể

Khi tải tập dữ liệu hoặc DatasetBuilder , bạn có thể chỉ định phiên bản sẽ sử dụng. Ví dụ:

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

Nếu sử dụng TFDS cho một ấn phẩm, chúng tôi khuyên bạn:

  • chỉ sửa thành phần MAJOR của phiên bản ;
  • quảng cáo phiên bản nào của bộ dữ liệu đã được sử dụng trong kết quả của bạn.

Làm như vậy sẽ giúp bản thân trong tương lai, độc giả và người đánh giá của bạn tái tạo kết quả của bạn dễ dàng hơn.

Thí nghiệm

Để dần dần đưa ra các thay đổi trong TFDS đang ảnh hưởng đến nhiều người xây dựng bộ dữ liệu, chúng tôi đã đưa ra khái niệm về các thử nghiệm. Khi được giới thiệu lần đầu tiên, một thử nghiệm bị tắt theo mặc định, nhưng các phiên bản dữ liệu cụ thể có thể quyết định kích hoạt nó. Điều này thường sẽ được thực hiện trên các phiên bản "tương lai" (chưa được thực hiện chính tắc) lúc đầu. Ví dụ:

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

Khi một thử nghiệm đã được xác minh để hoạt động như mong đợi, nó sẽ được mở rộng cho tất cả hoặc hầu hết các bộ dữ liệu, tại thời điểm đó, nó có thể được bật theo mặc định và định nghĩa trên sẽ như sau:

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

Khi một thử nghiệm được sử dụng trên tất cả các phiên bản bộ dữ liệu (không còn phiên bản dữ liệu nào chỉ định {experiment: False} ), thử nghiệm có thể bị xóa.

Các thử nghiệm và mô tả của chúng được xác định trong core/utils/version.py .

BUILDER_CONFIGS và các phiên bản

Một số bộ dữ liệu xác định một số BUILDER_CONFIGS . Khi đó là trường hợp, versionsupported_versions được xác định trên chính các đối tượng cấu hình. Ngoài ra, ngữ nghĩa và cách sử dụng là giống hệt nhau. Ví dụ:

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