인공지능/Reinforce_Learning

[PART 3] Ch 02. Pytorch로 선형회귀 모델 만들기

아네스 2020. 12. 29. 15:42
반응형

requires_grad= True로 줌으로써 이 변수는 나중에 편미분을 해야한다고 알려줌.

 

이게 뭐해준걸까 ?

1개의 연산을 한번에 진행한 것이다. torch.ones(3,10)으로 바꾸면 [[1,1,1,1,1,1,1,1,1,1]*3개]가 되는것이고, 각각의 row에 대해서 Wx+b를 수행해서 10+5가 3개 만들어진다. 즉, 각각의 row를 data라고 할 때, 3번의 연산을 한번에 수행한 것이다.

여기에서 view함수는 reshape함수와 비슷하다. 즉,  view(-1,1)은 데이터가 얼마나 들어올진 모르겠지만 (1,100)이던 뭐던, 잘 모르겠고 벡터화 좀 시켜줘라 (1,15) => (15,1) 

 

float()을 해주는 이유는 numpy에서는 float64를 이용하는데, torch에서는 float32를 사용하기 때문

 

SGD(stochastic Gradient Descent)

 

Adam

둘간의 차이는 torch.optim.SGD를 썼냐 , torch.optim.Adam을 썼냐의 차이밖에 없다.

코드라인순서대로 보면

1. input =1, output 1인 Linear모델을 만들고

2. optimization function을 설정해주면서 1에서 만들 모델의 parameter들을 넣어주면서, learning rate을 설정한다.

3. step(epoch) 몇번이나 학습시킬지를 설정해준 값만큼 도는데,

 3-1. lin_model에서 xs값으로 y'(예측치)를 만들고

 3-2. criteria(y',y)간의 오차를 계산한다.

 3-3. opt.zero_grad()는 이전 step에서의 opt값들이 그대로 남아있게 되니 초기화를 시켜주는 코드고

  :

# 역전파 단계 전에, Optimizer 객체를 사용하여 (모델의 학습 가능한 가중치인)

# 갱신할 변수들에 대한 모든 변화도를 0으로 만듭니다. 이렇게 하는 이유는

#기본적으로 .backward()를 호출할 때마다 변화도가 버퍼(buffer)에 (덮어쓰지 않고)

# 누적되기 때문입니다. 더 자세한 내용은 torch.autograd.backward에 대한 문서를

# 참조하세요.

 3-4. criteria(y',y)에서 나온 loss에 대해서 backpropagation을 수행한다. 

 : 즉, 모델의 매개변수에 대한 손실의 변화도를 계산한다(편미분계산)

 3-5. opt.step() 

 : 위를 바탕으로 매개변수를 갱신하게 된다.

 

반응형