코린이의 공부일기

[Boost Camp] P.stage (Model) 본문

BOOST CAMP_정리

[Boost Camp] P.stage (Model)

SOJUNG 2021. 8. 26. 01:20

 

이전 포스팅까지 Dataset에 대한 포스팅이었다

이제는 데이터가 거칠만한 모델링을 만들어보자!

 

일반적으로 모델은 정보의 표현을 말한다

그렇지만 그 대상이 사람이거나 시스템이거나 여러가지가 있다.

 

우리가 말하고자 하는 말하는 모델은 딥러닝 모델이다

즉 , 최적화된 파라미터 를 가지고 있는 성능이 좋은 모델을 만들고자 하는 것이 목표이다

 

 

- Design Model with Pytorch

 

그렇다면  파이토치가 뭘까?

=Low Level, Pytonic,Flexibility 라고 할 수 있다

응용력이 뛰어나고 초보자 들에게도 쉽게 배울 수 있는 라이브러리이다. 

 

 

-nn.Module

nn.Module 안에는 사진과 같이 conv1,conv2을 가지고 있다.

그 말은 즉슨 Module안에는 여러 모듈들이 가지고 있는 파라미터들을 가지고 있다고 생각할 수 있고

그래서 이  Module을 가지고 모델을 불러오고 저장도 할 수 있다.

그래서 파라미터 의 최적화 된 값을 찾는 다는 것은 Model 의 Module에 대한 기반으로 만들어지게 된다는 것 이다.

 

또한 모든 Module모듈은 forward함수를 가진다

 

어떠한 모델을  설계했을 때, 모든 모듈은 forward함수를 가지기 때문에 실행을 한 번 돌려도 

모델의 각각 모듈의 forward가 실행된다.

 

-> 객체지향성 언어의 큰 장점이라고 볼 수 있다.

 

Module이 가지고 있는 각각의 파라미터도 확인해  볼 수 있다.

 

정리하자면 모델은 Modules을 상속받아 가진다면, 각각의 Module들은 weight와 bias같은 parameter 값 들을 가지고있고 그 parameter을 가진 Tensor는 required_grad와 grad, data 3개의 type들을 가지고 있다.

 

 

이 3가지 type들로 무엇을 할 수 있을까?

 

required_grad을 통해서 gradient의 계산을 진행하거나 진행하지 못하도록 할 수 있기 때문에

특정 layer의 계산을 못하게 막을 수 있다.

 

 

이렇게 pytorch에서는 parameter값 들도 dictionary 형태로 볼 수 있기 때문에 

상황에 맞게 핸들링 할 수 있다.

 

 

 

이미지분류에 쓰일 수 있는 Pretrained Model에 대해 이야기 해보자

pretrained model 사용 장점은

이전에 논문으로 증명된 좋은 성능의 모델을 가져와 비교적 쉽게 나의 도메인에 맞게 적용 시키는 것이다.

 

그렇다면!

 

우리의 목적에 맞게 Pretrained model을 가져와서 쓰는 방식을 뭐라할까?

바로 Transfer Learning이라고 한다!

 

 

 

Transfer Learning

 

먼저 ImageNet이 지정한 pretraining의 목적은 실생활에 존재하는 이미지를 1000개의 다른 Class로 구분하는 것 이다.

 

만일 내가 원하는 모델이 구름 위성사진을 input 값으로 넣어 구름의 종류가 output으로 나오게 하는 거라면,

-> pretraining된 model과 내가 푸려고 하는 문제와 어느정도 밀접한 관련이 있는지

꼭 확인해봐야한다.

 

 

 

Case by Case

 

pretrained model로 어떠한 문제를 해결하려 할 때 , case by case을 생각해보자!

만일 Pretrained model과 높은 유사성을 가진다면 CNN Backbone을 굳이 쓸 필요는 없다.

 

-> 위에서 보았던 parameter dictionary을 통해 이 과정을 진행해 볼 수 있다.

 

학습데이터가 충분할 때, 반대로 유사성이 낮다면 pretrained model을 통해 학습을 늘려 진행해 볼 수 있다.

 

 

유사성이 높다면 적은 데이터라도 분류기의 학습을 통해 괜찮은 결과가 나올 수 있다.

그치만 작은 유사성에서는 괜찮은 모델이 나올 확률이 매우 적다.

 

 

이렇게 pre_trained model을 사용하는 것도 어느정도 조건을 만족해야 사용 할 수 있다.

 

 

 

2021-08-26 회고록 + Competition

 

오늘은 어제 해보기로 했던 훈련진행을 해보지 못했다..!ㅠㅠ

파이프라인에 대한 감이 아직도 안 온거 같기도하고 코드를 많이보고 보면볼수록 더 어려워지는 것 같은 느낌이다.

그치만 이 과정들이 내가 더 배우고 있다는 거라고 생각한다!!!!

어느정도 전체적인 파이프라인구조는 알겠지만 왜 이게 여기있고 이건 왜쓰는거고 이런 절차 (?)들이 

굉장히 나에겐 오래걸렸던 것 같다. 사실 이 Competition자체가 다 이해를하고 코드를짜라 !

이런 주제로 한게 절대 아닌 것같은데 내가 너무 U.stage에서 했던 것 처럼 수학처럼 이해하고 넘어가려고 한 것 같다.

어느정도 훈련을 돌려보고 결과 값을 보며 EDA을 하든 Transform을 고치든 해야 더 감이 빠르게 오고 어떤 튜닝을 해봐야겠다 생각하며 더 빠르게 진행할 수 있었을 것 같은데 그게 오늘 좀 아쉽다.

그치만 내일은 꼭 돌려봐야겠다.

그래서 내일은 그 과정에 대한 나의 실험의 결과를 써볼 예정이다 .

 아 그리고 요즘들어 약간 코드강의라고 U stage와 다르게 강의를 늦게보려하는 경향이 있는데

이것부터 좀 고쳐야겠다. !!

 

 

내일 할 일

* 백준 알고리즘 1개 (dfs/bfs) 풀기

*강의 오전 중으로 완료하기 + 이론부분 블로그 포스팅 완료하기

*Competition 프로그래밍 돌려보며 정확도 확인하기

* 모든 걸 다 이해하고 넘어가려 하지말고 어느정도 알았다면 넘어가기 : -)

 

Comments