ML 커뮤니티 데이는 11월 9일입니다! TensorFlow, JAX에서 업데이트를 우리와 함께, 더 자세히 알아보기

분할 및 슬라이싱

모든 TFDS 데이터 세트는 다양한 데이터 분할 (예 : 노출 'train' , 'test' 탐구 할 수있다) 카탈로그를 .

"공식" 데이터 세트 분할 외에도 TFDS를 사용하면 분할 및 다양한 조합의 슬라이스를 선택할 수 있습니다.

슬라이싱 API

슬라이스 지침에 명시되어 tfds.load 또는 tfds.DatasetBuilder.as_dataset 관통 split= kwarg.

ds = tfds.load('my_dataset', split='train[:75%]')
builder = tfds.builder('my_dataset')
ds = builder.as_dataset(split='test+train[:75%]')

분할은 다음과 같을 수 있습니다.

  • 일반 분할 ( 'train' , 'test' ) : 선택된 분할 내의 모든 예.
  • 조각 : 조각과 같은 의미가 파이썬 슬라이스 표기법을 . 슬라이스는 다음과 같을 수 있습니다.
    • 절대 ( 'train[123:450]' , train[:4000] ) : (읽기 순서에 대한주의 참고 울부 짖는 소리를 참조)
    • 백분율 ( 'train[:75%]' , 'train[25%:75%]' ) : 100 개에도 조각으로 전체 데이터를 나눈다. 데이터를 100으로 나눌 수 없는 경우 일부 백분율에 추가 예가 포함될 수 있습니다.
    • 파편 ( train[:4shard] , train[4shard] ) : 요청 된 파편의 모든 예제를 선택합니다. (참조 info.splits['train'].num_shards 분할의 파편의 수를 얻을 수)
  • 분할의 조합 ( 'train+test' , 'train[:25%]+test' ) 스플릿 함께 인터리빙된다.
  • 전체 데이터 세트 ( 'all' ) : 'all' (에 해당하는 모든 스플릿의 합집합에 해당하는 특별한 분할 이름입니다 'train+test+...' ).
  • 분할 목록 ( ['train', 'test'] ) : 여러 tf.data.Dataset 별도로 반환됩니다 :
# Returns both train and test split separately
train_ds, test_ds = tfds.load('mnist', split=['train', 'test[50%]'])

tfds.even_splits 및 다중 호스트 교육

tfds.even_splits 같은 크기의 비 - 중첩 서브 분할의리스트를 생성한다.

# Divide the dataset into 3 even parts, each containing 1/3 of the data
split0, split1, split2 = tfds.even_splits('train', n=3)

ds = tfds.load('my_dataset', split=split2)

이는 각 호스트가 원본 데이터의 조각을 받아야 하는 분산 설정에서 교육할 때 특히 유용할 수 있습니다. 다음은 jax의 예입니다.

splits = tfds.even_splits('train', n=jax.process_count(), drop_remainder=True)
# The current `process_index` load only `1 / process_count` of the data.
ds = tfds.load('my_dataset', split=splits[jax.process_index()])

tfds.even_splits 입력으로서 임의의 분할 값을 수용 (예를 들어 'train[75%:]+test' )

슬라이싱 및 메타데이터

그것은 스플릿 / subsplits에 대한 추가 정보를 얻을 수 있습니다 ( num_examples , file_instructions , ...)을 사용하여 데이터 세트의 정보를 :

builder = tfds.builder('my_dataset')
builder.info.splits['train'].num_examples  # 10_000
builder.info.splits['train[:75%]'].num_examples  # 7_500 (also works with slices)
builder.info.splits.keys()  # ['train', 'test']

교차 검증

문자열 API를 사용한 10겹 교차 검증의 예:

vals_ds = tfds.load('mnist', split=[
    f'train[{k}%:{k+10}%]' for k in range(0, 100, 10)
])
trains_ds = tfds.load('mnist', split=[
    f'train[:{k}%]+train[{k+10}%:]' for k in range(0, 100, 10)
])

검증 데이터 세트는 각각 10 %가는 : [0%:10%] , [10%:20%] , ..., [90%:100%] . : 그리고 상기 트레이닝 데이터 세트는 각각 상보 90 %로하려고 [10%:100%] (의 대응하는 검증 세트 [0%:10%] , '[0 % : 10 %])

  • [20 % : 100 %] (for a validation set of [10 % : 20 %] '), ...

tfds.core.ReadInstruction 및 라운딩

보다는 str , 그것으로 스플릿을 통과 할 수있다 tfds.core.ReadInstruction :

예를 들어, split = 'train[50%:75%] + test' 에 해당 :

split = (
    tfds.core.ReadInstruction(
        'train',
        from_=50,
        to=75,
        unit='%',
    )

    + tfds.core.ReadInstruction('test')
)
ds = tfds.load('my_dataset', split=split)

unit 될 수있다 :

  • abs : 절대 슬라이스
  • % : 퍼센트 슬라이싱
  • shard : 파편 슬라이싱

tfds.ReadInstruction 또한 라운딩 인수가 있습니다. 데이터 집합의 예 수가없는 경우가 균등하게 분할 100 :

  • rounding='closest' (기본값) : 몇 %가 추가 예제를 포함 할 수 있도록 남아있는 예는, 퍼센트에 분산되어있다.
  • rounding='pct1_dropremainder' 나머지 예 감소되지만,이 보장 모든 퍼센트 예의 동일한 번호를 포함하는 (예 : len(5%) == 5 * len(1%) ).

재현성 및 결정성

생성하는 동안 주어진 데이터 세트 버전에 대해 TFDS는 예제가 디스크에서 결정적으로 섞이도록 보장합니다. 따라서 데이터 세트를 두 번(2개의 다른 컴퓨터에서) 생성해도 예제 순서는 변경되지 않습니다.

마찬가지로 subsplit의 API는 항상 동일한 선택한다 set 무관 등 플랫폼 아키텍처의이 평균 예를 set('train[:20%]') == set('train[:10%]') + set('train[10%:20%]') .

그러나, 예를 읽은 순서가 결정되지 않을 수 있습니다. 이것은 다른 매개 변수에 따라 달라집니다 (예를 들면 여부 shuffle_files=True ).