Learn · 0
버그 고쳐 보기
배우지 못하는 학습 루프 둘. 각각 틀린 줄이 하나씩 있다. 찾아서 고치고 Run 을 누르면 — 손실이 내려갔는지 페이지가 말해 준다. torch 에 쓰던 그대로의 Python 이고, 설치할 것은 없다.
제자리에 선 루프
손실은 15 step 마다 찍힌다. 우선 그대로 돌려 숫자를 읽어 보자: 움직이지 않는다. 한 줄의 인자 하나가 이유다.
막혔다면 — 답.
lr=0.0 은 학습률 0 이다: opt.step() 은 가중치를
lr × gradient 만큼 움직이는데, 0 에 무엇을 곱해도 0 이다. lr=0.1
로 바꿔 보자. 너무 큰 학습률은 그것대로 실패한다 — 다음엔 1.0 을
넣고 지켜보자.
달아나는 루프
이번엔 학습률이 제대로 있는데도 자리에 못 앉는다. 돌려 보자: 손실이 오르내리기만 하고 자리를 못 잡는다 — 60 step 뒤에도 처음 그 자리다. 루프 안에서 호출 하나가 빠졌다.
막혔다면 — 답.
gradient 는 쌓인다: backward() 는 매번
.grad 를 갈아끼우지 않고 더한다. 그래서 그 앞에 opt.zero_grad()
가 없으면 매 step 이 지금까지의 gradient 전부의 합만큼 움직인다. 루프 본문 첫 줄에
opt.zero_grad() 를 되돌려 놓자.
지금 손에 있는 것
브라우저 탭 안에서 y = 3x + 1 을 배운 모델이고, import 한 줄 빼면 torch
코드다. 어느 서빙 런타임이든 읽는 그 파일로 내보낼 수 있다:
이것이 torch.onnx.export 이고, 페이지 자신의 파일시스템에 쓴다. torch 와
다른 곳은 Python 페이지에 전부 있다 — 짧다.