PyTorch - 데이터세트 반복 데이터 인터페이스 __getitem__ 예외 처리

내 CSDN을 팔로우하는 것을 환영합니다: https://spike.blog.csdn.net/
이 문서 주소: https://spike.blog.csdn.net/article/details/133378772

데이터세트

모델 학습 과정에서 데이터 로딩은 예외 및 통제할 수 없는 요인이 발생하기 매우 쉬우므로 예외 캡처를 통해 적시에 처리해야 합니다. 일반적인 방법은 오류 샘플을 직접 건너뛸 수도 있습니다. collate_fn실행 보충할 다음 샘플.

PyTorch Dataset 클래스는 데이터와 레이블을 반복 가능한 객체로 캡슐화할 수 있는 데이터 세트를 나타내는 데 사용되는 추상 클래스입니다. Dataset 클래스를 사용하려면 이를 상속하고 두 가지 메서드를 구현해야 합니다.

  • __getitem__(self, index): 주어진 인덱스를 기반으로 데이터 세트의 샘플과 해당 라벨을 반환합니다.
  • __len__(self): 데이터 세트의 샘플 수를 반환합니다.

지금 바로:

  1. 데이터 수집을 별도의 함수로 캡슐화합니다.
  2. 지속적인 모니터링을 사용 while True하고 올바르게 실행되면 건너뜁니다 break.
  3. 실행이 실패하면 로그가 인쇄되고 다음 샘플이 실행되도록 선택됩니다 idx += 1.
  4. 인덱스가 오버플로되지 않도록 주의하세요.

소스 코드는 다음과 같습니다.

    def __getitem__(self, idx):
        # TODO: 解决数据异常问题,KeyError,尽量保持数据干净
        while True:
            try:
                feats = self.getitem_wrapper(idx)
                break
            except Exception as e:
                name = self.idx_to_chain_id(idx)
                logger.error(f"err sample: {
      
      name} !!!")
                idx += 1
                idx = idx % len(self._chain_ids)  # 避免溢出
        return feats

おすすめ

転載: blog.csdn.net/u012515223/article/details/133378772