cs [COURSERA] Deep Neural Networks with PyTorch by IBM 강의 리뷰 3-2
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/Deep Neural Networks with PyTorch 리뷰

[COURSERA] Deep Neural Networks with PyTorch by IBM 강의 리뷰 3-2

by 시몬쯔 2020. 3. 30.
728x90
반응형

이번 포스팅은 3.6에 관한 내용이다.

 

 

3.6 Linear regression: Training and Validation Data

 

주어진 데이터를 Training data와 Validation data로 나눠서 학습하는 과정이다.

 

  • Make Some Data
  • Create a Linear Regression Object, Data Loader and Criterion Function
  • Different learning rates and Data Structures to Store results for Different Hyperparameters
  • Train different Modules for different Hyperparameters
  • View Results

목차에서 알 수 있듯이 이 단원은 Hyperparameters를 설정하는 것에 초점을 맞추고 있다. Validation data가 hyperparameter(learning rate, batchsize 등)등 설정하는 데에 이용되는 데이터이기 때문이다.

 

먼저 준비과정으로 여러 패키지를 import 한다. nn.Module를 사용하기 위한 nn, numpy, pyplot 그리고 optim패키지도 가져온다.

 

 

 

1) Make Some Data

 

First, we'll create some artificial data in a dataset class. The class will include the option to produce training data or validation data. The training data will include outliers.

먼저 가상의 데이터를 dataset class에서 만든다. 옵션에서 training data인지 validation data인지 설정할 수 있다. 

training data는 outliers를 포함할 것이라 되어있다. 

 

* 여기서 outlier란?

위키백과 정의를 보면 다른 데이터와 상당히 다른 데이터라고 되어있다. 즉, 튀는 점이라고 생각하면 이해하기 쉬울 듯 하다. 그림으로 보면 화살표가 가리키고 있는 저 점이 되겠다. 일차 함수를 따르고 있는 듯한 다른 점들과는 상당히 다르게 튀는 점이다.

준비를 했으면 Data Class를 만들어보자.

 

torch.utils.data로부터 Dataset, DataLoader를 import하고 

그 Dataset을 상속받아 Data Class를 만든다.

x는 -3부터 3까지 0.1간격인 60개의 데이터이고 f는 -3*x + 1 형태의 데이터, y는 f에 normally distributed noise를 더한 데이터이다. outliers 부분을 보면 train == True일 때 즉 training data일 때 y의 0번째 그리고 50~54번째 데이터를 각 0과 20으로 설정한다고 되어있다. 즉, 원래 -3*x+1에서 약간의 노이즈를 더한 정도였는데 이 추세에서 완전히 벗어난 값을 넣어준다는 것이다. 만약 train이 False면 pass 즉 Validation data에서는 outlier를 설정해주지 않는다고 한다.

 

마찬가지로 getitem과 len함수도 만들어 준다.

 

위에서 말했듯이 train_data는 train = True로 validation data는 train = False로 설정하여 만들어준다.

그림을 그려보면,

outlier를 더 쉽게 확인가능하다.

 

2) Create a Linear Regression Object, Data Loader and Criterion Function

 

이제 Linear regression class를 만들어보자. 자세한 설명은 앞 포스팅들에서 했으니 생략한다.

 

MSE loss 함수와 Data loader도 만든다. 여기서 주의할 점은 DataLoader에 dataset이 train_data만 들어간다는 것이다. 왜냐하면 validation data는 엄연히 weight를 업데이트하는 training에는 쓰이지 않기 때문이다.

 

 

3) Different learning rates and Data Structures to Store results for different Hyperparameters

 

 

 

 

각 error와 model들을 저장할 공간도 만들어둔다.

 

4) Train different models for different Hyperparameters

Try different values of learning rates, perform stochastic gradient descent, and save the results on the training data and validation data. Finally, save each model in a list.

위에서 설정한 다양한 learning rate로 training을 해보자.

 

 

전체 for문을 learning rate 리스트에 관해 감싸서 실행을 한다. 그리고 MODELS에 각 learning rate에 대응하는 모델을 저장해준다.

 

epoch = 10으로 돌려보자.

 

 

각 learning rate에 따라 loss가 변하는 것을 알 수 있다. 가장 validation error가 작은 lr = 10-3을 선택한다.

 

각 모델의 파라미터를 출력해보면 learning rate에 따른 update 된 w, b를 알 수 있다.

 

 

Validation data를 각 model에 나오는 yhat값 그래프들 또한 확인할 수 있다.

 

learning rate 외에 model를 더 개선시키는 방법은 많다. 또, model을 저장하는 이런 무식한(?) 방법 말고 다른 방법도 많다. 다음 포스팅에서 자세히 알아보겠다.

 

 

728x90
반응형

댓글