본문 바로가기

컴퓨터26

[TIL] 반복문의 인덱스 정하기는 의미있는 이름으로 한다(i, j, k 지양) 문제 잘 짜놓은 k-neareast neighbor 머신러닝 코드가 왜인지 이상한 결과를 뱉어낸다. 여기저기에 $std::cout$를 찍어서 확인해보지만 어디 하나 이상한 데가 없어서 당황스럽다. 왜인지 distance를 잘 계산은 하는데 계속 같은 점에 대해서만 하는 것 같아서 이상하다. 원인 알고보니(그래도 1시간 정도만에 찾았다) 이중 for문에서 i와 j를 헷갈려서 쓴 부분이 있었다. 말하자면 j번째 training sample과의 거리를 구해야하는데, i번째 sample과의 거리를 구하고 있었다. 그러니 당연히 대다수의 distance가 같게 나타난 것이었다. 해결방법 오타를 바로잡았다. 예방 이건 클린코드와 관련된 문제다. 이와 관련된 공통적인 조언은 의미있는 이름을 지으라는 것이다. 내 경우.. 2023. 10. 17.
[TIL] 파이썬 float32, float64 자료형 문제상황 PyTorch로 간단한 내용을 구현하는 공부를 하다가, numerical gradient와 체크를 해 보니 차이가 크게 벌어지는 현상이 나타났다. 그래서 코드를 잘못 짰으리라고 생각하고 오래 고민하고 이것저것 시도를 해보았으나 고쳐지질 않았다. 그래서 다른 사람이 같은 내용을 구현해 놓은 코드를 가지고 돌려 본 뒤, 문제의 원인이 자료형에 있음을 발견했다. 원인 위의 코드 어딘가에서 $torch.softmax(..., dtype=float32)$로 값을 받아온 게 있었는데, 해당 부분에서는 실제로 float32의 인풋이 이루어졌으나, 뒤에는 보다 정밀한 계산을 위해 float64가 사용되었다. 그러다 보니 에러메시지 "RuntimeError: expected scalar type Double b.. 2023. 10. 13.