๊ด€๋ฆฌ ๋ฉ”๋‰ด

Doby's Lab

scheduler.get_last_lr(), ์ด์ œ๋Š” Learning Rate๋ฅผ ์ด๋ ‡๊ฒŒ ํ™•์ธํ•˜๋”๋ž๋‹ˆ๋‹ค ๋ณธ๋ฌธ

Code about AI/PyTorch

scheduler.get_last_lr(), ์ด์ œ๋Š” Learning Rate๋ฅผ ์ด๋ ‡๊ฒŒ ํ™•์ธํ•˜๋”๋ž๋‹ˆ๋‹ค

๋„๋น„(Doby) 2024. 7. 28. 13:52

๐Ÿค” Problem

๋ชจ๋ธ์„ ํ•™์Šตํ•˜๋‹ค๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•œ ์ถœ๋ ฅ(Learning Rate์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์ถœ๋ ฅ)์ด ์—†์–ด์„œ ์ด์— ๋Œ€ํ•ด verbose๋ฅผ True๋กœ ๋ฐ”๊ฟ”์ฃผ๋ ค๊ณ  ์ž‘์—…ํ•  ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋“ค์–ด๊ฐ€ ๋ดค๋‹ค๊ฐ€ ์•„๋ž˜ ๋‚ด์šฉ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

PyTorch: "์šฐ๋ฆฌ ์ด์ œ verbose ๊ธฐ๋Šฅ ๋บ„ ๊ฑฐ์˜ˆ์š”, ๋Œ€์‹  ์ด์ œ ์ด๊ฑฐ ์“ฐ์„ธ์š”."


๐Ÿ˜€ Solution

์ด์ œ๋Š” ์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•ด์„œ verbose argument๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๋‚ด์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ get_last_lr()์„ ์‚ฌ์šฉํ•ด ๋ณด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ณ„์‚ฐํ•œ Learning Rate๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ, ์ด๋Š” 'ํ˜„์žฌ ์—ํฌํฌ์—์„œ ์–ด๋– ํ•œ Learning Rate๋กœ ํ•™์Šต์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋Š”๊ฐ€'๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ, ์•„๋ž˜ ๋‚ด์šฉ์œผ๋กœ ์ž˜ ํ™•์ธ์ด ๋˜๋Š”์ง€๋ฅผ ์‹คํ—˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์คฌ์Šต๋‹ˆ๋‹ค.

 

๋งค ์—ํฌํฌ๋งˆ๋‹ค ํ˜„์žฌ์˜ Learning Rate๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ์œผ๋ฉฐ, ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜ ์ฝ”๋“œ๋Š” ์˜๋„์ ์œผ๋กœ mode๋ฅผ max๋กœ ๋‘์–ด, ์ค„์–ด๋“œ๋Š” loss ๊ฐ’์— ๋Œ€ํ•ด ์Šค์ผ€์ค„๋Ÿฌ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.)

... # ์œ„ ๋ชจ๋ธ, ์†์‹ค ํ•จ์ˆ˜ ๋“ฑ ๋ถˆํ•„์š”ํ•œ ๋‚ด์šฉ ์ƒ๋žต
optimizer = Adam(model.parameters(), lr=0.001)
scheduler = ReduceLROnPlateau(optimizer, mode='max', patience=3)

epochs = 20

for epoch in range(epochs):
    print(f"Epoch: {epoch+1:04d} - Learning Rate: {scheduler.get_last_lr()[0]:.8f}", end=' ')
    
    optimizer.zero_grad()
    output_tensor = model(input_tensor)
    
    loss = loss_fn(output_tensor, target_tensor)
    
    loss.backward()
    optimizer.step()
    
    print(f"Loss: {loss.item():.8f}")
    scheduler.step(loss)
Epoch: 0001 - Learning Rate: 0.00100000 Loss: 0.25520608
Epoch: 0002 - Learning Rate: 0.00100000 Loss: 0.25505885
Epoch: 0003 - Learning Rate: 0.00100000 Loss: 0.25491315
Epoch: 0004 - Learning Rate: 0.00100000 Loss: 0.25476906
Epoch: 0005 - Learning Rate: 0.00100000 Loss: 0.25462645
Epoch: 0006 - Learning Rate: 0.00010000 Loss: 0.25448543
Epoch: 0007 - Learning Rate: 0.00010000 Loss: 0.25447142
Epoch: 0008 - Learning Rate: 0.00010000 Loss: 0.25445747
Epoch: 0009 - Learning Rate: 0.00010000 Loss: 0.25444353
Epoch: 0010 - Learning Rate: 0.00001000 Loss: 0.25442955
Epoch: 0011 - Learning Rate: 0.00001000 Loss: 0.25442815
Epoch: 0012 - Learning Rate: 0.00001000 Loss: 0.25442678
Epoch: 0013 - Learning Rate: 0.00001000 Loss: 0.25442535
Epoch: 0014 - Learning Rate: 0.00000100 Loss: 0.25442401
Epoch: 0015 - Learning Rate: 0.00000100 Loss: 0.25442386
Epoch: 0016 - Learning Rate: 0.00000100 Loss: 0.25442374
Epoch: 0017 - Learning Rate: 0.00000100 Loss: 0.25442359
Epoch: 0018 - Learning Rate: 0.00000010 Loss: 0.25442347
Epoch: 0019 - Learning Rate: 0.00000010 Loss: 0.25442344
Epoch: 0020 - Learning Rate: 0.00000010 Loss: 0.25442341

์œ„ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด scheduler.get_last_lr()[0] ์ฝ”๋“œ๊ฐ€ ํ˜„์žฌ์˜ Learning Rate๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ์„ ํ•ด์ค€ ์ด์œ ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ์˜ ๋ฆฌํ„ด ํƒ€์ž…์ด List[float]๋ผ์„œ ์œ„์™€ ๊ฐ™์ด ๊ฐ’์„ ๋ฐ›์•„์˜ค๋„๋ก ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“‚ Reference

https://pytorch.org/docs/stable/generated/torch.optim.lr_scheduler.ReduceLROnPlateau.html#torch.optim.lr_scheduler.ReduceLROnPlateau

 

ReduceLROnPlateau — PyTorch 2.4 documentation

Shortcuts

pytorch.org

 

728x90