내 CSDN을 팔로우하는 것을 환영합니다: https://spike.blog.csdn.net/
이 문서 주소: https://spike.blog.csdn.net/article/details/133378772
모델 학습 과정에서 데이터 로딩은 예외 및 통제할 수 없는 요인이 발생하기 매우 쉬우므로 예외 캡처를 통해 적시에 처리해야 합니다. 일반적인 방법은 오류 샘플을 직접 건너뛸 수도 있습니다. collate_fn
실행 보충할 다음 샘플.
PyTorch Dataset 클래스는 데이터와 레이블을 반복 가능한 객체로 캡슐화할 수 있는 데이터 세트를 나타내는 데 사용되는 추상 클래스입니다. Dataset 클래스를 사용하려면 이를 상속하고 두 가지 메서드를 구현해야 합니다.
__getitem__(self, index)
: 주어진 인덱스를 기반으로 데이터 세트의 샘플과 해당 라벨을 반환합니다.__len__(self)
: 데이터 세트의 샘플 수를 반환합니다.
지금 바로:
- 데이터 수집을 별도의 함수로 캡슐화합니다.
- 지속적인 모니터링을 사용
while True
하고 올바르게 실행되면 건너뜁니다break
. - 실행이 실패하면 로그가 인쇄되고 다음 샘플이 실행되도록 선택됩니다
idx += 1
. - 인덱스가 오버플로되지 않도록 주의하세요.
소스 코드는 다음과 같습니다.
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