💩 에러 해결
[PyTorch/에러 해결] torchaudio.transforms.SpectralCentroid output이 nan이 되는 문제
복만
2021. 10. 16. 20:55
훈련을 시키다가 loss가 자꾸 nan이 되는 현상이 발생했다.
디버깅을 해보니 loss가 잘 줄어들다가 갑자기 nan으로 바뀌어서 학습 과정 자체의 문제는 아닌 것 같았고,
살펴보니 모델 내부에서 값이 nan이 되는 경우가 있었다.
모델에서 torchaudio.transforms.SpectralCentroid를 이용해 데이터의 spectral centroid를 추출하는 과정이 있었는데,
일부 데이터의 spectral centroid가 nan을 포함하고 있었다.
코드를 살펴보니 spectral centroid를 계산하는 과정에서 spectrogram의 sum으로 값을 나눠주는 과정이 있었는데, (마지막 줄)
이 값이 0이 되어서 nan값이 나온 것이었다.
Solution
torch.nan_to_num을 이용해 spectral centroid의 값을 0으로 바꿔주어 해결했다.
def forward(self, x):
out = torchaudio.transforms.SpectralCentroid()(x)
out = torch.nan_to_num(out)
...
다른 것도 아니고 torchaudio가 딥러닝 라이브러리인데.. nan값은 알아서 안나오게 처리해줬어야 하는 거 아닌가? 하는 생각이 들며 오늘도 한 3시간을 날렸다.. ^_^
반응형