링크: https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html#define-the-network


Neural Networks


torch.nn 패키지 이용하여 신경망 구성


nn은 autograd에 의해 정의됨


nn.Module 은 레이어들을 포함하며 forward(input) 메소드는 output을 반환함


학습은 주로 다음의 절차를 따름


학습할 파라미터(웨이트)를 갖는 신경망 정의

데이타셋을 인풋으로 반복

인풋을 네트워크 통과시킴

loss 계산(아웃풋이 정답과 얼마나 떨어져있는지)

back propagation

네트워크 웨이트(파라미터)를 다음의 규칙을 주로 이용하여 갱신함:

weight = weight - learning_rate * gradient




Define the network




forward 함수를 정의해야하며 기울기가 계산될 backward 함수는 autograd를 사용하면 자동적으로 정의됨

forward 함수에서는 어떤 텐서 연산도 사용 가능함



학습할 파라미터는 net.parameters()를 호출하면 얻을 수 있음




인풋을 32x32 랜덤인 경우:




Loss Function


nn 패키지에는 로스 함수가 여러개 있음. nn.MSELoss는 mean-squared error를 계산하는 로스함수





.grad_fn 속성을 이용하여 역방향으로 loss를 따라가보면 아래와 같은 게산 그래프를 볼 수 있음


따라서 loss.backward()를 부를때는 모든 그래프는 loss에 의해 미분되어져있고, requires_grad=True인 모든 텐서들은 기울기가 축적된 .grad 텐서를 갖게됨(?) - backward()를 통해 백프로파게이션 한다는 뜻






Backprop


백프로파게이션을 하려면 loss.backward()를 하면 됨


1회 backward를 통해 conv1의 bias의 gradients가 바뀐걸 알수있음




Read Later:

nn 패키지는 다양한 모듈과 로스펑션을 포함하고 있으며 deep neural network의 블록을 형성한다. 리스트는 아래 주소

https://pytorch.org/docs/stable/nn.html




Update the weights


다음의 간단한 파이썬 식을 통해 가능:


learning_rate = 0.01

for f in net.parameters():

f.data.sub_(f.grad.data * learning_rate)


하지만, 신경망을 쓸 때, SGD, Nesterov-SGD, Adam, RMSProp 등의 다양한 갱신 룰을 이용하고 싶다면 이를 위한 패키지인 torch.optim을 이용하면된다



+ Recent posts