Summary
FCN에서 메모리를 너무 많이 써서 CNN으로 데이터의 특성을 추출한다
torch.optim.SGD에서 S는 Batch_size에 관한 내용이다.
아직까지는 Agumentation을 하지 않았다. 이제 곳 할것임...
Neural Network를 어떻게 학습시키는 것이 가장 효과적인 방법인가??
결과적으로 Accuracy를 높히는게 목적이다... 동일한 Network라도 어떻게 학습 시키느냐에 따라서 성능이 80퍼가 나올수도 있고, 성능이 90, 95%정도씩 차이가 날 수 있다.
예를 들어서 손글씨를 예측하는 경우에, Accuracy가 80 90 나오면, 오 ~ 잘되네 넘어갈텐데, 반면 개발해서 상용화해서 사용할 경우는 말이 달라짐 현업에서는 최대치로 성능을 높혀서 출시해야 하기 때문이다. 그래서 98% 99%에 가깝게 모든걸 걸어서 작업해야 한다.
badySitting에서 하이퍼 파라미터들의 역할에 대해서 중요하게 다룰것이다...
Activation Functions
1. 특정 이상치의 값만 추출해 낼때 사용한다.
2. 선형을 비 선형으로 바꿔주기 위해 사용한다.
Activation function들은 전부 비선형이다. (꺽은 직선도 비선형이다.)
성능 높힐때 95이상 정확도를 높힐때 사용된다. Accuracy가 높아졌을때 사용한다.
Sigmoid를 사용하지말고 ReLU를 사용 하라고 하지만,
Sigmoid만 사용해야 할 때가 있다.
그 경우는
바이너리 classification을 사용할때는 softmax()를 사용하지 않는다.
기준은 양수 음수로 판단할때 sigmoid()를 사용한다.
sigmoid()함수는 0에서 1의 사이만들 값으로 갖는다.
코드에서 Sigmoid()함수를 보면 Threshold(기준치를 정해줌)을 찾아보자.
Sigmoid()가 나왔다는건, Classification에서 softmax()대신 사용하는 것이라고 생각하면 된다.
classification 모델에서 바이너리 문제를 해결하기 위해 사용한다.
예측값이 하나 일때, Softmax()함수 대신에 Sigmoid()함수를 사용해서 라벨을 구분한다.
Data preProcessing
Deep Learning을 크게 3파트로 나눌수 있다
1. Preprocessing (전처리) - 70% ~ 80% 거의 모든 작업이 전처리에서 이루어 진다.
2. Deeplearning - 20% ~ 25%
3. Postprocessing (후처리) - 5%
Preprocessing(6단계)이란?
1. Data Cleansing - 깨끗한 데이타를 위한 노가다 검수단계 (데이터랑 라벨이 잘 들어갔는지 오타는 없는지 등 확인)
2. Scaling - 값을 scaling 1/255 (연산하기 쉽게 스케일링 해준다.)
3. Data Augmentation(문제를 다양하게 풀때 > 성능이 올라간다.)"
- transform 을 사용해서 Augmentation을 해준다. 다양하게 이미지를 변동 시키면서 성능을 올릴 수 있다.
transforms.compose([transforms.RandomRotation(), transforms.Random.Brighteness(),transforms.Random.Crop()])
변형할 순서도 중요하다.
4. Align Ratio -데이터 비율을 맞춰줘야한다.
예를들어) 강아지,고양이,개구리를 모델에 학습 시켜야 할때 내가 5000장이 있으면,
강아지 5000장, 고양이 4500장, 개구리 20장, 말 100장 이렇게되면 학습이 안된다. 그래서 비율같 갖게 해줘야 한다.
5. Use the shuffling property - 데이터 로딩할때 2가지 방법이 있는데 마지막 loader에서는 shuffle을 꼭 사용해서 섞어 줘야한다.
6. Learn about basic knowledge - 도메인 전문지식이 필요하다. 암MRI 판독 > 암/암x를 판독
위의 2번과 6번은 기존 basic코드에서 다룬 내용이다. 나머지 커스텀 모델을 만들때는 모든 것들을 고려해야한다.
Proprocessing이 실제 성능에 가장 많은 영향을 끼친다. 75~80% 투자하는 이유가 있다.
이후에 계획 들어가기전에 간트차트를 사용해서 일정을 조정해야한다.
간트차트는 일정을 정하는 차트라고 보면 된다.
Weight initialization
Batch normalization
이미지를 100개를 넣어서 돌리면 1개의 L(W)가 600개 나오는데,
이것을 100(num_epochs)번 반복한다 이미지를 넣어서 모델링 할때 batch nomalization을 하는데 이유는 valiancerk 높아져서 그런다.
nomalization
1. x 평균 만큼 빼고 - 중심을 이동 시킨다.
2. 분산으로 나눈다. - 1/255로 나눈다. 1/255(급변하는 데이터를 다루기 쉬운 안정적인 값, stable한 값으로 바꿔줌) 0~1이 작업을 batch_size만큼해야해서 batch_nomalization이라고 한다.
흰색선 > 회색선으로 만들어줌... x축을 반으로 나눠서 시작점으로 두고, x의 보폭을 줄인다.
값이 차분해지지 않으면 학습이 잘 안된다.
학습을 하게되면 할때마다 높은값은 높아지고 낮은 값은 낮아지기 때문에 그 값들을 잘 잡아주기 위해서는 nomalization을 batch마다 해주어야 한다.
Batch Normalization (BN) techniques have been proposed to reduce the so-called Internal Covariate Shift (ICS) by attempting to keep the distributions of layer outputs unchanged. Experiments have shown their effectiveness on training deep neural networks. However, since only the first two moments are controlled in these BN techniques,
Batch_Nomalization은 모든 레이어마다 들어가며, ReLU()이전에 사용된다. 결과 값 마다 Variance가 높아서 이 값들을 낮춰주는데 사용하는 목적이 있다. 즉, 갭을 낮춰준다.
질문1. (32x32x32) featuremap이있을때, 값이 1 이고 분산값은 0 이다. >>> stable 하다 질문2. (32x32x32) featuremap이있을때, 값이 뒤죽박죽있을때 분산값은 높다. >>> 높다.작업은 질문1의 결과 처럼 해야한다. Batch_size값은 최소 32으로 해라.
100을 안 넘는이유는 컴퓨터의 성능이 딸려서 그렇다. 최소 32이상은 하라고 권장한다.
BabySitting the learning processing
히든레이어의 갯수, 출력갯수는 하이퍼 파라미터에 속한다
위 경우는 끝까지 지켜보고 loss의 파형을 알아야한다.
위 사진은 epoch이 지날수록 loss가 줄어드는 파형이다.
경험, 파형을 봐서 작업을 진행해야한다. (전처리)
노란색의 경우는 learning rate가 너무 높은 경우이다.
보라색의 경우는 learning rate가 너무 낮은 경우이다.
녹색의 경우에는 learning rate가 조금 높은 경우이다... 조금 낮춰야한다.
빨간색이 적당한 파형이다.
딥러닝 개발자는 하루종일 이런 파형을 보고 항상 계산하고 연구한다. >> 지루하고 반복적인 측면이 있다......
Hyperparameter optimization
max pooling = upsampling method 같은 말임
epoch = 100(기본값)
batch size = 32
kernel size = 3x3 (대세)
pooling type = max_pooling or Average_pooling
activation function = ReLU() If you see sigmoid function, think of it as binary classification and use it instead of softmax function.
optimizer = Adam, SGD, etc ...
data augmentation = transform ~ rotation, crop, brightness...
k-fold = 7 (usually)
참고 자료
15. Batch size & Batch Norm
Batch size batch size란 sample데이터 중 한번에 네트워크에 넘겨주는 데이터의 수를 말한다. batch는 mini batch라고도 불린다. 이 때 조심해야할 것은, batch_size와 epoch은 다른 개념이라는 것이다. 예를 들..
nittaku.tistory.com
blog.lunit.io/2018/08/03/batch-size-in-deep-learning/
Batch Size in Deep Learning
딥러닝 모델의 학습은 대부분 mini-batch Stochastic Gradient Descent (SGD)를 기반으로 이루어집니다. 이 때 batch size는 실제 모델 학습시 중요한 hyper-parameter 중 하나이며, batch size가 모델 학습에 끼치는 영
blog.lunit.io
'workSpace > PYTHON' 카테고리의 다른 글
[DL] Warming up (0) | 2021.02.02 |
---|---|
[PyTorch] WHAT is Frame work and WHY PyTorch (0) | 2021.02.02 |
[DL] CNN Overview, Convolution Filter & Feature-map, Activation Function & Pooling (0) | 2021.01.29 |
[DL] Basic analysis of using SGD Optimizer with code. (2) (0) | 2021.01.28 |
[DL] Basic analysis of using SGD Optimizer with code. (1) (0) | 2021.01.28 |