• 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()

no_grad documentation{: 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์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค˜์•ผ ํ•œ๋‹ค.