본문 바로가기
오류 해결

[Pytorch] RuntimeError: invalid argument X: expected a non-empty list of Tensors

by First Adventure 2024. 9. 21.
반응형

에러 메시지 설명

  이 오류는 PyTorch에서 비어 있는 텐서 리스트를 연산에 전달하려고 할 때 발생합니다. 주로 torch.cat(), torch.stack()과 같은 텐서를 리스트로 받아서 처리하는 함수에서 발생합니다. 이러한 함수들은 적어도 하나 이상의 텐서를 입력으로 받아야 하지만, 비어 있는 리스트가 전달되면 이 오류가 발생합니다.

 

발생 원인

  • 비어 있는 리스트 전달: torch.cat() 또는 torch.stack() 함수에 빈 리스트를 전달한 경우. 이 함수들은 텐서 리스트를 연결하거나 쌓는 연산을 수행하는데, 빈 리스트는 처리할 수 없습니다.
  • 리스트 내 텐서가 누락됨: 데이터를 처리하는 과정에서 리스트가 제대로 구성되지 않았거나, 조건문으로 인해 리스트가 비어 있는 경우 발생할 수 있습니다​.

 

해결 방법

  • 리스트가 비어 있지 않은지 확인: torch.cat() 또는 torch.stack()을 호출하기 전에 리스트가 비어 있지 않은지 확인합니다. 리스트에 적어도 하나 이상의 텐서가 포함되어 있는지 확인하는 코드를 작성할 수 있습니다.
if len(tensor_list) > 0:
    result = torch.cat(tensor_list)  # 또는 torch.stack(tensor_list)
else:
    raise ValueError("Tensor list is empty")

 

  • 리스트를 동적으로 구성할 때 주의: 리스트를 반복문이나 조건문을 통해 동적으로 구성할 때, 비어 있는지 확인하고 필요에 따라 적절한 텐서를 추가해야 합니다.
tensor_list = [t for t in tensors if t is not None]  # None 값을 제외한 텐서 리스트 생성
if tensor_list:
    result = torch.cat(tensor_list)

 

  • 리스트 초기화 및 확인: 리스트를 초기화할 때 올바르게 생성되었는지, 텐서가 올바르게 추가되었는지 확인해야 합니다. 데이터 전처리 과정에서 리스트가 비어 있을 가능성을 항상 염두에 두어야 합니다.

 

관련 내용 및 추가 팁

  • 이 오류는 주로 데이터 처리 과정에서 리스트가 비어 있는 경우에 발생합니다. 특히 torch.cat() 또는 torch.stack()과 같이 텐서 리스트를 입력으로 받아 처리하는 함수에서 빈 리스트가 전달되면 오류가 발생합니다. 이러한 함수들은 최소한 하나 이상의 텐서가 리스트에 포함되어 있어야 올바르게 동작합니다​.
  • 리스트를 생성하거나 조작할 때 비어 있는지 확인하고, 필요하다면 기본값을 추가하는 방법으로 비어 있는 리스트를 방지하세요.
  • 데이터 전처리 과정에서 리스트가 비어 있는 상황을 방지할 수 있도록 조건을 명확히 설정하고, 텐서가 정상적으로 리스트에 추가되는지 확인하세요.
반응형