Path: blob/master/site/ko/datasets/external_tfrecord.md
38476 views
TFDS로 외부 tfrecord 로드하기
tfds API로 직접 로드하기 원하는 타사 도구로 생성한 tf.train.Example 프로토(내부에 .tfrecord, .riegeli...)가 있는 경우 이 페이지의 내용을 확인하세요.
.tfrecord 파일을 로드하려는 경우 다음만 수행하면 됩니다.
TFDS 명명 규칙을 따릅니다.
tfrecord 파일과 함께 메타데이터 파일(
dataset_info.json,features.json)을 추가합니다.
제한 사항:
tf.train.SequenceExample는 지원되지 않습니다.tf.train.Example만 지원됩니다.tfds.features로tf.train.Example을 표현할 수 있어야 합니다(아래 섹션 참조).
파일 명명 규칙
TFDS는 파일 이름에 대한 템플릿 정의를 지원하므로 다양한 파일 명명 체계를 유연하게 사용할 수 있습니다. 템플릿은 tfds.core.ShardedFileTemplate로 표시되며 {DATASET}, {SPLIT}, {FILEFORMAT}, {SHARD_INDEX}, {NUM_SHARDS}, 및 {SHARD_X_OF_Y}과 같은 변수를 지원합니다. 예를 들어, TFDS의 기본 파일 명명 체계는 {DATASET}-{SPLIT}.{FILEFORMAT}-{SHARD_X_OF_Y}입니다. MNIST의 경우, 이는 파일 이름이 다음과 같이 표시된다는 것을 의미합니다.
mnist-test.tfrecord-00000-of-00001mnist-train.tfrecord-00000-of-00001
메타데이터 추가하기
특성 구조 제공하기
TFDS가 tf.train.Example 프로토를 디코딩할 수 있게 하려면 사양과 일치하는 tfds.features 구조를 제공해야 합니다. 예시:
이는 다음 tf.train.Example 사양에 해당합니다.
특성을 지정하면 TFDS가 이미지, 동영상 등을 자동으로 디코딩할 수 있습니다. 다른 TFDS 데이터세트와 마찬가지로 특성 메타데이터(예: 레이블 이름 등)가 사용자에게 노출됩니다(예: info.features['label'].names).
직접 생성 파이프라인을 제어하는 경우
TFDS 외부에서 데이터세트를 생성하지만 여전히 직접 생성 파이프라인을 제어하는 경우 tfds.features.FeatureConnector.serialize_example을 사용하여 dict[np.ndarray]에서 tf.train.Example 프로토 bytes으로 데이터를 인코딩할 수 있습니다.
이 경우 TFDS와의 특성 호환성이 보장됩니다.
마찬가지로 feature.deserialize_example는 프로토(example)를 디코딩하기 위해 존재합니다.
직접 생성 파이프라인을 제어하지 않는 경우
tfds.features가 tf.train.Example에서 표시되는 방식은 colab에서 확인할 수 있습니다.
사람이 읽을 수 있는
tf.train.Example의 구조로tfds.features를 변환하기 위해features.get_serialized_info()를 호출할 수 있습니다.tf.io.parse_single_example로 전달된 정확한FixedLenFeature,... 사양을 가져오기 위해spec = features.tf_example_spec을 사용할 수 있습니다.
참고: 사용자 정의 특성 커넥터를 사용하는 경우 to_json_content/from_json_content를 구현한 후 self.assertFeature를 사용하여 테스트합니다(특성 커넥터 가이드 참조).
분할에 대한 통계 가져오기
TFDS는 각 샤드 내의 정확한 예시 수량을 요구합니다. 이는 len(ds) 혹은 하위 분할 API: split='train[75%:]'와 같은 기능에 필요합니다.
이 정보가 있는 경우 명시적으로
tfds.core.SplitInfo목록을 만들고 다음 섹션으로 넘어갈 수 있습니다.이 정보를 모르는 경우
compute_split_info.py스크립트(또는tfds.folder_dataset.compute_split_info를 사용하는 자체 스크립트)를 사용하여 계산할 수 있습니다. 이러한 스크립트는 제공된 디렉터리에 있는 모든 샤드를 읽고 정보를 계산하는 빔 파이프라인을 시작합니다.
메타데이터 파일 추가하기
데이터세트에 따른 적절한 메타데이터 파일을 자동으로 추가하려면 다음과 같이 tfds.folder_dataset.write_metadata를 사용합니다.
데이터세트 디렉터리에서 함수를 호출하면 메타데이터 파일(dataset_info.json,...)이 추가되고 TFDS를 사용하여 데이터세트를 로드할 준비가 완료됩니다(다음 섹션 참조).
TFDS를 사용하여 데이터세트 로드하기
폴더에서 직접
메타데이터가 생성되면 표준 TFDS API(예: tfds.builder)와 함께 tfds.core.DatasetBuilder를 반환하는 tfds.builder_from_directory를 사용하여 데이터세트를 로드할 수 있습니다.
여러 폴더에서 직접
여러 폴더에서 데이터를 로드할 수도 있습니다. 예를 들어 강화 훈 수행 시 다수의 에이전트가 각각 별도의 데이터세트를 생성한 후 모든 데이터세트를 함께 로드하려는 경우가 이 기능이 필요합니다. 또한 매일 데이터세트를 생성하고 특정 날짜 범위의 데이터를 로드하는 경우와 같이 정기적으로 데이터세트가 생성되는 경우에도 이 기능이 필요합니다.
여러 폴더에서 데이터세트를 로드하려면 표준 TFDS API(예: tfds.builder)와 함께 tfds.core.DatasetBuilder를 반환하는 tfds.builder_from_directory를 사용합니다.
참고: 각 폴더에는 분할에 대한 정보가 포함된 자체 메타데이터가 있어야 합니다.
폴더 구조(선택 사항)
TFDS와의 더 나은 호환성을 위해 데이터를 <data_dir>/<dataset_name>[/<dataset_config>]/<dataset_version>와 같이 구성할 수 있습니다. 예시:
이 경우 data_dir/만 제공해도 데이터세트가 tfds.load / tfds.builder API와 호환됩니다.