Pytorch๋ BackPropagtion์ ๊ตฌํํ ๋ Autograd ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋์ด ์๋ค.
BATCH_SIZE = 64
INPUT_SIZE = 1000
HIDDEN_SIZE = 100
OUTPUT_SIZE = 10
BATCH ํฌ๊ธฐ 64๊ฐ ์๋ฏธํ๋ ๊ฒ์ ํ ๋ฒ์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ์ ์์ด๋ค. INPUT์ ํฌ๊ธฐ๋ ํ์ต ์ํฌ ๋ฐ์ดํฐ์ ์์ด๋ค. OUTPUT์ ๋ง๊ทธ๋๋ก ์ถ๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์ด๋ค.
x = torch.randn(BATCH_SIZE,
INPUT_SIZE,
device = DEVICE,
dtype = torch.float,
requires_grad = False)
y = torch.randn(BATCH_SIZE,
OUTPUT_SIZE,
device = DEVICE,
dtype = torch.float,
requires_grad = False)
w1 = torch.randn(INPUT_SIZE,
HIDDEN_SIZE,
device = DEVICE,
dtype = torch.float,
requires_grad = True)
w2 = torch.randn(HIDDEN_SIZE,
OUTPUT_SIZE,
device = DEVICE,
dtype = torch.float,
requires_grad = True)
x :
torch.randn๋ (0,1) ์ ๊ท๋ถํฌ์์ ์ํ๋งํ ๊ฐ์ด๋ค. INPUT ํฌ๊ธฐ 1000๊ฐ์ ๋ฒกํฐ๋ฅผ BATCH์ ํฌ๊ธฐ 64๊ฐ ๋ง๋ ๋ค.
dim = (64,1000) requires_grad๋ Gradient๋ฅผ ์๋ฏธํ๋ค.
y :
Output๊ณผ์ ์ค์ฐจ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด Output ํฌ๊ธฐ๋ฅผ 10์ผ๋ก ์ค์
w1:
Input๊ณผ์ ํฌ๊ธฐ๊ฐ ๋์ผํ๊ณ ํ๋ ฌ ๊ณฑ์ ํตํด 100๊ฐ์ ๋ฐ์ดํฐ ์์ฑ (1000,100) requires_grad = True, Gradient ๊ณ์ฐ(backpropagation์ ํตํด w1 ์
๋ฐ์ดํธ)
w2:
w1๊ณผ x๋ฅผ ํ๋ ฌ ๊ณฑํ ๊ฒฐ๊ณผ์ ๊ณ์ฐํ ์์๋ ์ฐจ์์ด์ด์ผํ๋ค. w1๊ณผ x์ ๊ณฑ์ (1,100) ์ด๋ค ์ด๊ฒ์ (100,10) ํ๋ ฌ์ ํตํด Output์ ๊ณ์ฐํ ์ ์๋๋ก w2 ๋ชจ์ ์ค์ . requires_grad = True, Gradient ๊ณ์ฐ(backpropagation์ ํตํด w2 ์
๋ฐ์ดํธ)
learning_rate = 1e-6
for t in range(1,501):
y_pred = x.mm(w1).clamp(min=0).mm(w2)
loss = (y_pred-y).pow(2).sum()
if t % 100 == 0:
print('Iteration: ',t,'\t',"Loss: ",loss.item())
loss.backward()
with torch.no_grad():
w1 -= learning_rate * w1.grad
w2 -= learning_rate * w2.grad
w1.grad.zero_()
w2.grad.zero_()
learning_rate : ํ์ต๋ฅ Gradient ๊ณ์ฐ ๊ฒฐ๊ด๊ฐ์ learning_rate๋ฅผ ๊ณฑํด์ ์
๋ฐ์ดํธ ํ๋ค.
mm(matmul) : Input ๊ฐ์ธ x๋ฅผ w1๊ณผ matrix multiple x X w1
clamp : ๋น์ ํํจ์ ์ ์ฉ
$y_i$ = \begin{cases} \text{min} & \text{if } x_i < \text{min} \\ x_i & \text{if } \text{min} \leq x_i \leq \text{max} \\ \text{max} & \text{if } x_i > \text{max} \end{cases}
w1.grad.zero_ : Gradient ๊ฐ์ ์ด๊ธฐํํด ๋ค์ ๋ฐ๋ณต๋ฌธ์ ์งํํ ์ ์๋๋ก Gradient ๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ค.
Iteration: 100 Loss: 673.0462646484375
Iteration: 200 Loss: 8.727155685424805
Iteration: 300 Loss: 0.18558651208877563
Iteration: 400 Loss: 0.004666611552238464
Iteration: 500 Loss: 0.00030295629403553903
์ค์ํ ๊ฒ์ gradient ๊ฐ์ด ์ด๊ธฐํ๋๋ backward ๋ฉ์๋๋ฅผ ํตํด backpropagation์ ์งํํ ๋ gradient ๊ฐ์ ์๋ก ๊ณ์ฐํ๋ค.
'๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Code-Server] ์ฝ๋ ์๋ฒ์์ ์ฃผํผํฐ ๋ ธํธ๋ถ ์ฌ์ฉํ๊ธฐ (0) | 2021.07.11 |
---|---|
[Code-Server] import-im6.q16: unable to open X server ์๋ฌ (0) | 2021.07.11 |
[Jupyter Notebook] ์ฃผํผํฐ ๋ ธํธ๋ถ ์ ์คํฌ๋ฆฝํธ ๋๋น ์กฐ์ (cell script option), ํ๋ค์ค ๋๋น ์กฐ์ (0) | 2021.03.21 |
[Data Crawling] Spongebob - 1 (0) | 2021.03.16 |
Matplotlib ํ๊ธ ํฐํธ ์ ์ฉ (0) | 2021.02.13 |