Notice
Recent Posts
Recent Comments
Link
관리 메뉴

뛰는 놈 위에 나는 공대생

[에러기록] Pytorch 모델 weight가 업데이트되는지 확인 본문

프로그래밍 Programming

[에러기록] Pytorch 모델 weight가 업데이트되는지 확인

보통의공대생 2022. 12. 30. 21:34

Pytorch 모델을 업데이트하려고 optimizer를 쓰는데 loss가 전혀 변하지 않는 것을 보고 업데이트 된 것인지 확인하고 싶었다.

 

다음 코드와 같이 일치하지 않는 부분이 있는지 확인하였다.

 

optimizer.zero_grad()
a = list(model.parameters())[0]
print(list(model.parameters())[0].grad) # gradient가 잘 계산되었는지 확인, None이면 이상한 것

loss.backward()
optimizer.step()
b = list(model.parameters())[0]

print(torch.equal(a.data, b.data)) # a와 b가 일치하는지 확인

 

업데이트 전 후의 parameter 값을 비교함으로써 업데이트되는지 확인할 수 있다.

다만 주의할 점은 learning rate를 너무 작게 잡고 gradient가 작으면 한 스텝마다 거의 업데이트되지 않는다. 이 와중에 자료형이 float32이면 분명 업데이트 되었음에도 수치적으로 표현이 되지 않아 a,b가 동일하게 나올 수 있다.

 

그래서 이런 경우에는 동일한 input을 넣어서 model의 output이 동일한지 비교해보도록 한다.

 


나의 경우에는 업데이트가 되지 않는 것을 위의 코드로 확인했고

알고보니 model을 optimizer를 정의한 후에 만들어서 그런 것이었다(...멍청)

Comments