- toc {:toc}
Model.train() & Model.eval()
- λͺ¨λΈμ κ΅μ‘νκ³ μλ€λ κ²μ λͺ¨λΈμ μλ¦°λ€.
- Batch Normalization Layer, Dropout Layer μ κ²½μ° train, eval μ λ°λΌμ λ€λ₯΄κ² λμνκΈ° λλ¬Έμ νμ΅, μΆλ‘ μ λ°λ₯Έ λμμ μ§μ ν΄μ€μΌ νλ€.
- train()
- Batch Norm - Batch Statistics λ₯Ό μ΄μ©νλ€.
- Dropout - μ£Όμ΄μ§ νλ₯ μ λ°λΌ νμ±νλλ€.
- eval()
- Batch Norm - νμ΅ μ μ¬μ©λ Batch Statistics λ₯Ό ν΅ν΄ κ²°μ λ Running Statistics λ₯Ό μ΄μ©νλ€.
- Dropout - λΉνμ±ν λλ€.
With torch.no_grad()
{: width=β800β}{: .center}
- no_grad() λ₯Ό with statement μ ν¬ν¨μν€λ©΄ Pytorch μ Autograd Engine μ λΉνμ±ννμ¬ gradient μ°μ°μ μ¬μ©νμ§ μλ€.
- μ΄ κ²½μ° backward λ₯Ό μ¬μ©νμ§ μκ³ require_grad=False κ° λλ€.
- gradient μ°μ°μ νμ§ μκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄κ³ μλλ₯Ό λμΈλ€.
optimizer.zero_grad()
-
Pytorch μ κ²½μ° gradient κ°λ€μ backward ν λ κ³μν΄μ μΆμ νλ€.
-
zero_grad() λ₯Ό νμ§ μλλ€λ©΄ μ΄μ step μμ backward ν λ μ¬μ©λ gradient κ°μ΄ νμ¬ step μμλ μ¬μ©λκΈ° λλ¬Έμ μ€λ³΅ μ μ©λλ€.
β μ€λ³΅ μ μ©λλ€λ©΄ μλν λ°©ν₯κ³Ό λ€λ₯Έ λ°©ν₯μ κ°λ₯΄μΌ νμ΅μ΄ μ λμ§ μλλ€.
β κ²°λ‘ μ μΌλ‘ λ§€ νμ΅ iteration λ§λ€ optimizer.zero_grad() λ₯Ό ν΄μ£Όλ©΄μ gradient λ₯Ό 0 μΌλ‘ μ΄κΈ°ν μμΌμ€μΌ νλ€.