🚴‍♂️
TIL
  • MAIN
  • : TIL?
  • : WIL
  • : Plan
  • : Retrospective
    • 21Y
      • Wait a moment!
      • 9M 2W
      • 9M1W
      • 8M4W
      • 8M3W
      • 8M2W
      • 8M1W
      • 7M4W
      • 7M3W
      • 7M2W
      • 7M1W
      • 6M5W
      • 1H
    • 새사람 되기 프로젝트
      • 2회차
      • 1회차
  • TIL : ML
    • Paper Analysis
      • BERT
      • Transformer
    • Boostcamp 2st
      • [S]Data Viz
        • (4-3) Seaborn 심화
        • (4-2) Seaborn 기초
        • (4-1) Seaborn 소개
        • (3-4) More Tips
        • (3-3) Facet 사용하기
        • (3-2) Color 사용하기
        • (3-1) Text 사용하기
        • (2-3) Scatter Plot 사용하기
        • (2-2) Line Plot 사용하기
        • (2-1) Bar Plot 사용하기
        • (1-3) Python과 Matplotlib
        • (1-2) 시각화의 요소
        • (1-1) Welcome to Visualization (OT)
      • [P]MRC
        • (2강) Extraction-based MRC
        • (1강) MRC Intro & Python Basics
      • [P]KLUE
        • (5강) BERT 기반 단일 문장 분류 모델 학습
        • (4강) 한국어 BERT 언어 모델 학습
        • [NLP] 문장 내 개체간 관계 추출
        • (3강) BERT 언어모델 소개
        • (2강) 자연어의 전처리
        • (1강) 인공지능과 자연어 처리
      • [U]Stage-CV
      • [U]Stage-NLP
        • 7W Retrospective
        • (10강) Advanced Self-supervised Pre-training Models
        • (09강) Self-supervised Pre-training Models
        • (08강) Transformer (2)
        • (07강) Transformer (1)
        • 6W Retrospective
        • (06강) Beam Search and BLEU score
        • (05강) Sequence to Sequence with Attention
        • (04강) LSTM and GRU
        • (03강) Recurrent Neural Network and Language Modeling
        • (02강) Word Embedding
        • (01강) Intro to NLP, Bag-of-Words
        • [필수 과제 4] Preprocessing for NMT Model
        • [필수 과제 3] Subword-level Language Model
        • [필수 과제2] RNN-based Language Model
        • [선택 과제] BERT Fine-tuning with transformers
        • [필수 과제] Data Preprocessing
      • Mask Wear Image Classification
        • 5W Retrospective
        • Report_Level1_6
        • Performance | Review
        • DAY 11 : HardVoting | MultiLabelClassification
        • DAY 10 : Cutmix
        • DAY 9 : Loss Function
        • DAY 8 : Baseline
        • DAY 7 : Class Imbalance | Stratification
        • DAY 6 : Error Fix
        • DAY 5 : Facenet | Save
        • DAY 4 : VIT | F1_Loss | LrScheduler
        • DAY 3 : DataSet/Lodaer | EfficientNet
        • DAY 2 : Labeling
        • DAY 1 : EDA
        • 2_EDA Analysis
      • [P]Stage-1
        • 4W Retrospective
        • (10강) Experiment Toolkits & Tips
        • (9강) Ensemble
        • (8강) Training & Inference 2
        • (7강) Training & Inference 1
        • (6강) Model 2
        • (5강) Model 1
        • (4강) Data Generation
        • (3강) Dataset
        • (2강) Image Classification & EDA
        • (1강) Competition with AI Stages!
      • [U]Stage-3
        • 3W Retrospective
        • PyTorch
          • (10강) PyTorch Troubleshooting
          • (09강) Hyperparameter Tuning
          • (08강) Multi-GPU 학습
          • (07강) Monitoring tools for PyTorch
          • (06강) 모델 불러오기
          • (05강) Dataset & Dataloader
          • (04강) AutoGrad & Optimizer
          • (03강) PyTorch 프로젝트 구조 이해하기
          • (02강) PyTorch Basics
          • (01강) Introduction to PyTorch
      • [U]Stage-2
        • 2W Retrospective
        • DL Basic
          • (10강) Generative Models 2
          • (09강) Generative Models 1
          • (08강) Sequential Models - Transformer
          • (07강) Sequential Models - RNN
          • (06강) Computer Vision Applications
          • (05강) Modern CNN - 1x1 convolution의 중요성
          • (04강) Convolution은 무엇인가?
          • (03강) Optimization
          • (02강) 뉴럴 네트워크 - MLP (Multi-Layer Perceptron)
          • (01강) 딥러닝 기본 용어 설명 - Historical Review
        • Assignment
          • [필수 과제] Multi-headed Attention Assignment
          • [필수 과제] LSTM Assignment
          • [필수 과제] CNN Assignment
          • [필수 과제] Optimization Assignment
          • [필수 과제] MLP Assignment
      • [U]Stage-1
        • 1W Retrospective
        • AI Math
          • (AI Math 10강) RNN 첫걸음
          • (AI Math 9강) CNN 첫걸음
          • (AI Math 8강) 베이즈 통계학 맛보기
          • (AI Math 7강) 통계학 맛보기
          • (AI Math 6강) 확률론 맛보기
          • (AI Math 5강) 딥러닝 학습방법 이해하기
          • (AI Math 4강) 경사하강법 - 매운맛
          • (AI Math 3강) 경사하강법 - 순한맛
          • (AI Math 2강) 행렬이 뭐예요?
          • (AI Math 1강) 벡터가 뭐예요?
        • Python
          • (Python 7-2강) pandas II
          • (Python 7-1강) pandas I
          • (Python 6강) numpy
          • (Python 5-2강) Python data handling
          • (Python 5-1강) File / Exception / Log Handling
          • (Python 4-2강) Module and Project
          • (Python 4-1강) Python Object Oriented Programming
          • (Python 3-2강) Pythonic code
          • (Python 3-1강) Python Data Structure
          • (Python 2-4강) String and advanced function concept
          • (Python 2-3강) Conditionals and Loops
          • (Python 2-2강) Function and Console I/O
          • (Python 2-1강) Variables
          • (Python 1-3강) 파이썬 코딩 환경
          • (Python 1-2강) 파이썬 개요
          • (Python 1-1강) Basic computer class for newbies
        • Assignment
          • [선택 과제 3] Maximum Likelihood Estimate
          • [선택 과제 2] Backpropagation
          • [선택 과제 1] Gradient Descent
          • [필수 과제 5] Morsecode
          • [필수 과제 4] Baseball
          • [필수 과제 3] Text Processing 2
          • [필수 과제 2] Text Processing 1
          • [필수 과제 1] Basic Math
    • 딥러닝 CNN 완벽 가이드 - Fundamental 편
      • 종합 실습 2 - 캐글 Plant Pathology(나무잎 병 진단) 경연 대회
      • 종합 실습 1 - 120종의 Dog Breed Identification 모델 최적화
      • 사전 훈련 모델의 미세 조정 학습과 다양한 Learning Rate Scheduler의 적용
      • Advanced CNN 모델 파헤치기 - ResNet 상세와 EfficientNet 개요
      • Advanced CNN 모델 파헤치기 - AlexNet, VGGNet, GoogLeNet
      • Albumentation을 이용한 Augmentation기법과 Keras Sequence 활용하기
      • 사전 훈련 CNN 모델의 활용과 Keras Generator 메커니즘 이해
      • 데이터 증강의 이해 - Keras ImageDataGenerator 활용
      • CNN 모델 구현 및 성능 향상 기본 기법 적용하기
    • AI School 1st
    • 현업 실무자에게 배우는 Kaggle 머신러닝 입문
    • 파이썬 딥러닝 파이토치
  • TIL : Python & Math
    • Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
      • Relations - 다대다 관계
      • Relations - 다대일 관계
      • 템플릿 파일 모듈화 하기
      • TDD (Test Driven Development)
      • template tags & 조건문
      • 정적 파일(static files) & 미디어 파일(media files)
      • FBV (Function Based View)와 CBV (Class Based View)
      • Django 입문하기
      • 부트스트랩
      • 프론트엔드 기초다지기 (HTML, CSS, JS)
      • 들어가기 + 환경설정
    • Algorithm
      • Programmers
        • Level1
          • 소수 만들기
          • 숫자 문자열과 영단어
          • 자연수 뒤집어 배열로 만들기
          • 정수 내림차순으로 배치하기
          • 정수 제곱근 판별
          • 제일 작은 수 제거하기
          • 직사각형 별찍기
          • 짝수와 홀수
          • 체육복
          • 최대공약수와 최소공배수
          • 콜라츠 추측
          • 크레인 인형뽑기 게임
          • 키패드 누르기
          • 평균 구하기
          • 폰켓몬
          • 하샤드 수
          • 핸드폰 번호 가리기
          • 행렬의 덧셈
        • Level2
          • 숫자의 표현
          • 순위 검색
          • 수식 최대화
          • 소수 찾기
          • 소수 만들기
          • 삼각 달팽이
          • 문자열 압축
          • 메뉴 리뉴얼
          • 더 맵게
          • 땅따먹기
          • 멀쩡한 사각형
          • 괄호 회전하기
          • 괄호 변환
          • 구명보트
          • 기능 개발
          • 뉴스 클러스터링
          • 다리를 지나는 트럭
          • 다음 큰 숫자
          • 게임 맵 최단거리
          • 거리두기 확인하기
          • 가장 큰 정사각형 찾기
          • H-Index
          • JadenCase 문자열 만들기
          • N개의 최소공배수
          • N진수 게임
          • 가장 큰 수
          • 124 나라의 숫자
          • 2개 이하로 다른 비트
          • [3차] 파일명 정렬
          • [3차] 압축
          • 줄 서는 방법
          • [3차] 방금 그곡
          • 거리두기 확인하기
        • Level3
          • 매칭 점수
          • 외벽 점검
          • 기지국 설치
          • 숫자 게임
          • 110 옮기기
          • 광고 제거
          • 길 찾기 게임
          • 셔틀버스
          • 단속카메라
          • 표 편집
          • N-Queen
          • 징검다리 건너기
          • 최고의 집합
          • 합승 택시 요금
          • 거스름돈
          • 하노이의 탑
          • 멀리 뛰기
          • 모두 0으로 만들기
        • Level4
    • Head First Python
    • 데이터 분석을 위한 SQL
    • 단 두 장의 문서로 데이터 분석과 시각화 뽀개기
    • Linear Algebra(Khan Academy)
    • 인공지능을 위한 선형대수
    • Statistics110
  • TIL : etc
    • [따배런] Kubernetes
    • [따배런] Docker
      • 2. 도커 설치 실습 1 - 학습편(준비물/실습 유형 소개)
      • 1. 컨테이너와 도커의 이해 - 컨테이너를 쓰는이유 / 일반프로그램과 컨테이너프로그램의 차이점
      • 0. 드디어 찾아온 Docker 강의! 왕초보에서 도커 마스터로 - OT
    • CoinTrading
      • [가상 화폐 자동 매매 프로그램] 백테스팅 : 간단한 테스팅
    • Gatsby
      • 01 깃북 포기 선언
  • TIL : Project
    • Mask Wear Image Classification
    • Project. GARIGO
  • 2021 TIL
    • CHANGED
    • JUN
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Thu
      • 2 Wed
      • 1 Tue
    • MAY
      • 31 Mon
      • 30 Sun
      • 29 Sat
      • 28 Fri
      • 27 Thu
      • 26 Wed
      • 25 Tue
      • 24 Mon
      • 23 Sun
      • 22 Sat
      • 21 Fri
      • 20 Thu
      • 19 Wed
      • 18 Tue
      • 17 Mon
      • 16 Sun
      • 15 Sat
      • 14 Fri
      • 13 Thu
      • 12 Wed
      • 11 Tue
      • 10 Mon
      • 9 Sun
      • 8 Sat
      • 7 Fri
      • 6 Thu
      • 5 Wed
      • 4 Tue
      • 3 Mon
      • 2 Sun
      • 1 Sat
    • APR
      • 30 Fri
      • 29 Thu
      • 28 Wed
      • 27 Tue
      • 26 Mon
      • 25 Sun
      • 24 Sat
      • 23 Fri
      • 22 Thu
      • 21 Wed
      • 20 Tue
      • 19 Mon
      • 18 Sun
      • 17 Sat
      • 16 Fri
      • 15 Thu
      • 14 Wed
      • 13 Tue
      • 12 Mon
      • 11 Sun
      • 10 Sat
      • 9 Fri
      • 8 Thu
      • 7 Wed
      • 6 Tue
      • 5 Mon
      • 4 Sun
      • 3 Sat
      • 2 Fri
      • 1 Thu
    • MAR
      • 31 Wed
      • 30 Tue
      • 29 Mon
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • FEB
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • JAN
      • 31 Sun
      • 30 Sat
      • 29 Fri
      • 28 Thu
      • 27 Wed
      • 26 Tue
      • 25 Mon
      • 24 Sun
      • 23 Sat
      • 22 Fri
      • 21 Thu
      • 20 Wed
      • 19 Tue
      • 18 Mon
      • 17 Sun
      • 16 Sat
      • 15 Fri
      • 14 Thu
      • 13 Wed
      • 12 Tue
      • 11 Mon
      • 10 Sun
      • 9 Sat
      • 8 Fri
      • 7 Thu
      • 6 Wed
      • 5 Tue
      • 4 Mon
      • 3 Sun
      • 2 Sat
      • 1 Fri
  • 2020 TIL
    • DEC
      • 31 Thu
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Tue
      • 2 Wed
      • 1 Tue
    • NOV
      • 30 Mon
Powered by GitBook
On this page
  • CIFAR10 데이터세트를 이용하여 CNN 모델 구현 실습 - 01
  • CIFAR10 데이터세트를 이용하여 CNN 모델 구현 실습 - 02
  • CIFAR10 데이터세트를 이용하여 CNN 모델 구현 실습 - 03
  • 가중치 초기화(Weight Initialization)의 이해와 적용 - 01
  • 가중치 초기화(Weight Initialization)의 이해와 적용 - 02
  • 배치 정규화(Batch Normalization) 이해와 적용 - 01
  • Feature Scaling
  • Batch Normalization의 필요성
  • 배치 정규화(Batch Normalization) 이해와 적용 - 02
  • 학습 데이터 Shuffle 적용 유무에 따른 모델 성능 비교
  • 배치크기 변경에 따른 모델 성능 비교
  • 학습율(Learning Rate) 동적 변경에 따른 모델 성능 비교
  • 필터수와 층(Layer) 깊이 변경에 따른 모델 성능 비교
  • Global Average Pooling의 이해와 적용
  • 가중치 규제(Weight Regularization)의 이해와 적용

Was this helpful?

  1. TIL : ML
  2. 딥러닝 CNN 완벽 가이드 - Fundamental 편

CNN 모델 구현 및 성능 향상 기본 기법 적용하기

210727

CIFAR10 데이터세트를 이용하여 CNN 모델 구현 실습 - 01

이미지넷보다 크기가 작아서 학습하는데 오래걸림. 이미지넷은 백만개 정도의 이미지. 그래서 좀 더 크기가 작은 CIFAR 사용. 6만개의 데이터가 있음.

  • 이 중 훈련 데이터는 5만개, 테스트 데이터는 1만개

def show_images(images, labels, ncols=8):
    figure, axs = plt.subplots(figsize=(22, 6), nrows=1, ncols=ncols)
    for i in range(ncols):
        axs[i].imshow(images[i])
        label = labels[i].squeeze()
        axs[i].set_title(NAMES[int(label)])

데이터를 이미지로 보여주는 함수.

  • figure는 전체 액자를 의미하며 axs는 개별 이미지(축)를 의미한다.

  • figsize는 액자의 크기.

  • nrows는 가로줄 개수

  • ncols는 세로줄 개수

라벨 같은 경우는 초기에 (50000, 1)과 (10000, 1)의 2차원 형태로 존재하므로 1차원으로 스퀴즈 해주는 모습

이미지 전처리

이미지의 각 픽셀값을 255.0 으로 나누어서 0~1사이의 값으로 존재하게 함.

추후에, sparse categorical crossentropy 를 알아보기 위해 원-핫 인코딩을 적용하지 않았음

CNN 2D

Convolution과 ReLU를 2번 하기 때문에 2D이다. 3번 하면 3D. 이 때 입력 채널은 항상 4차원이어야 한다. (이미지 개수, 세로, 가로, 채널)

  • 3차원이어도 작동은 하지만, 꼭 4차원으로 입력할 것을 기억하자

  • 추후에 predict를 할 때도 4차원으로 입력되어야 한다! 훈련과 테스트의 크기가 동일해야 한다

    • 만약에 1개의 이미지만 predict 할 거라면 1개의 이미지(3차원)를 4차원으로 차원 변환 해줘야 함

CIFAR10 데이터세트를 이용하여 CNN 모델 구현 실습 - 02

x = Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu')(x)

x = Conv2D(filters=64, kernel_size=(3, 3), padding='same')(x)
x = Activation('relu')(x)
  • Conv2D에서 활성화를 함께 할 수도 있고 3-4번 라인처럼 따로할 수도 있다.

x = MaxPooling2D(pool_size=(2, 2))(x)

x = MaxPooling2D(pool_size=2)(x)

x = MaxPooling2D(2)(x)
  • 각각의 한줄의 코드는 모두 같은 의미이다.

preds = model.predict(test_images[:32], batch_size=32)
print('예측 결과 shape:', preds.shape)
print('예측 결과:', preds)
  • 결과는 무조건 2차원 형태의 softmax 결과값이다

  • 따라서 예측 클래스는 무조건 np.argmax 로 해줘야 한다.

predicted_class = np.argmax(preds, axis=1)
print('예측 클래스 값:', predicted_class)

>>> 예측 클래스 값: [3 8 8 0 6 6 1 6 3 1 0 9 5 7 9 8 5 7 8 6 7 2 4 9 4 2 4 0 9 6 6 5]

CIFAR10 데이터세트를 이용하여 CNN 모델 구현 실습 - 03

필터 사이즈를 3 by 3 으로 할지, 5 by 5 로 할지는 실험적으로 해서 성능을 비교해야 한다. 정해진 골든룰 같은 것은 없다.

가중치 초기화(Weight Initialization)의 이해와 적용 - 01

좋은 가중치 초기화 조건

  • 값이 동일 해서는 안됨

  • 충분히 작아야 함

    • 충분히란 얼마만큼?

  • 적당한 분산(또는 표준편차)을 가져야 함

    • 적당한 양은 어느정도?

numbers = np.random.normal(loc=0.0,scale=1,size=[100, 100])
print(numbers)
print(numbers.mean())
print(numbers.std())
print(numbers.sum())
  • 표준 정규 분포의 난수를 출력하는 함수이다.

    • loc : location, 평균

    • scale : 표준 편차

가중치 초기화(Weight Initialization)의 이해와 적용 - 02

Xavier Glorot Initialization

He Initialization

  • Xavier는 Sigmoid에 최적화된 방법이라면 He는 ReLU에 최적화된 방법이다

그렇지만, 성능은 데이터 바이 데이터. 좋아질 수도 있고 나빠질 수도 있다. 무조건적으로 좋은 것은 아님.

또한, 이후에 배치 정규화를 거치면 따로 가중치 초기화 과정을 거치지 않아도 된다.

배치 정규화(Batch Normalization) 이해와 적용 - 01

Feature Scaling

서로 다른 Feature 값들을 동일한 척도로 변환

Min-Max Scaling

0에서 1 사이 값으로 변환 : (X - 최솟값) / (최댓값 - 최솟값)

  • [20, 30, 40] => [0, 0.5, 1]

Z Score 정규화

평균이 0이고 표준 편차가 1인 데이터 세트로 변환 : (X - 평균) / 표준편차

  • [20, 30, 40] => [-1.22, 0, 1.22]

  • 평균 : 30, 표준편차 : 8.16

스케일링을 하지 않으면, GD 변화가 타원형으로 이동하게 된다.

Batch Normalization의 필요성

Internal Covariate Shift

신경망 내부의 각 층을 통과할 때마다 입력 데이터의 분포가 조금씩 변경되는 현상

  • 많은 뉴런 중 하나가 매우 크거나 작은 값을 가지게 되면 Loss함수가 최적화되기에 어려워진다. 따라서 각 뉴런에서 나오는 값을 스케일링 해줄 필요가 있음.

  • 분포가 바뀌면 학습하기가 어려워진다

  • 레이어를 거치면서 초기의 데이터 분포가 유지될 필요성을 느낌

배치 정규화(Batch Normalization) 이해와 적용 - 02

Batch Normalization 개요

  • 미니 배치의 평균과 분산을 구함

  • 각 데이터마다 Z-Score 변환

  • 이 후, 스케일링 파라미터를 곱하고 쉬프트 파라미터를 더한다

BN의 스케일링과 Shift 파라미터

  • 정규화 제약이 너무 제약적이어서 고정적인 값들이 많이 나오게 됨

  • 이를 해결하기 위해 적용

일반적으로 BN은 Conv 적용 후, Activation 전에 적용한다

  • 따라서 Conv2D에 Activation 빼기.

효과

  • 뛰어난 성능 향상 효과

  • Regularization 효과

    • 일종의 Dropout 효과이다.

    • 너무 Loss 함수에 휘둘리지 않도록 어느정도의 노이즈 추가 효과를 제공한다

  • 가중치 초기화 설정을 크게 신경 쓸 필요가 없어진다.

테스트 데이터 적용시 BN

  • 보통은 데이터가 적으므로 정규화 할 데이터가 많지 않음 또는 못함

  • 지수 가중 이동 평균을 적용하여 평균과 표준 편차를 구해서 할 수 있다고 함

학습 데이터 Shuffle 적용 유무에 따른 모델 성능 비교

기본적으로 셔플을 하면 데이터 간의 연관성을 잊기 때문에 좋다. 예를 들어서, 문제집을 푼다고 할 때 1번 문제와 2번 문제가 서로 비슷한 문제라면 나중에 다시 볼 때 1번을 풀면서 뒤에 2번 문제가 어떤 문제인지 예상할 수 있는 것과 비슷한 것.

noshuffle_history = model.fit(x=tr_images, y=tr_oh_labels, batch_size=64, epochs=30, shuffle=False, 
                    validation_data=(val_images, val_oh_labels))

tf.keras.backend.clear_session()
  • 1 : 모델에서 자체적으로 셔플을 할 수 있다. 기본값은 True 다. 이 때 description을 참고하면 x가 image generator 일 때는 셔플이 True 더라도 무시될 수 있다고 한다.

  • 4 : model이 반복적으로 메모리를 차지하는 것을 막기 위해서 수행한다.

셔플을 하는 것이 안하는 것보다 성능이 절대적으로 좋은 것은 아니지만, 대체로 비교적 좋은 성능을 보인다. 이 때, 주목할 점은 셔플을 하지 않으면 성능의 안정성이 떨어진다는 것입니다. 각 이터레이션 간의 편차가 심한 모습.

배치크기 변경에 따른 모델 성능 비교

큰 크기의 배치를 적용하면 더 많은 데이터를 SGD 하게 되고 이 때 안정성이 증가해서 더 나은 가중치가 Update 될 것 같지만 실제로는 그렇지 않다.

  • 물론, 크기가 너무 크면 하드웨어적으로 부담될 수 있다

큰 배치 사이즈보다 작은 배치 사이즈를 적용하는 것이 성능이 더 좋다. 작은 배치사지으가 상대적으로 더 자주 SGD를 계산하고 Update 하기 때문이다.

  • 논문에서는 8보다 크고, 32보다는 작을 것을 권고

  • BN이 적용되었을 경우는 적용하지 않았을 경우보다 더 작게 하면 좋다고 한다

학습율(Learning Rate) 동적 변경에 따른 모델 성능 비교

from tensorflow.keras.callbacks import ReduceLROnPlateau
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

model = create_model()
model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])

# validation loss가 향상되는 모델만 저장.
mcp_cb = ModelCheckpoint(filepath='/kaggle/working/weights.{epoch:02d}-{val_loss:.2f}.hdf5', monitor='val_loss', 
                         save_best_only=True, save_weights_only=True, mode='min', period=1, verbose=0)

# 5번 iteration내에 validation loss가 향상되지 않으면 learning rate을 기존 learning rate * 0.2로 줄임.  
rlr_cb = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=5, mode='min', verbose=1)
# 10번 iteration내에 validation loss가 향상되지 않으면 더 이상 학습하지 않고 종료
ely_cb = EarlyStopping(monitor='val_loss', patience=10, mode='min', verbose=1)


history = model.fit(x=tr_images, y=tr_oh_labels, batch_size=32, epochs=30, shuffle=True,
                    validation_data=(val_images, val_oh_labels),  
                    callbacks=[mcp_cb, rlr_cb, ely_cb] )
  • 8 : validation loss가 향상될 때 저장되도록 한다. (이전에 나왔던 내용)

    • save_best_only : validation loss가 가장 최고일 때만 저장하고 나머지는 다시 삭제

    • save_weights_only : 모델을 저장하는 것이 아니라 인자만 저장하도록 함

콜백을 가지고 성능 향상에 크게 기여할 수 있다.

필터수와 층(Layer) 깊이 변경에 따른 모델 성능 비교

Max Pooling의 효과를 Stride 2 로도 낼 수 있다. 성능적으로 큰 차이는 없었지만 Stride가 시간적으로 연산을 줄여준다.

Global Average Pooling의 이해와 적용

x = GlobalAveragePooling2D()(x)
x = Dropout(rate=0.5)(x)
x = Dense(50, activation='relu', name='fc1')(x)
x = Dropout(rate=0.2)(x)
output = Dense(10, activation='softmax', name='output')(x)
  • Flatten 대신 Global AveragePooling 을 적용하면 파라미터의 수를 크게 줄일 수 있다.

Global Average Pooling

피처맵의 가로 by 세로의 특정 영역을 Sub sampling 하지 않고, 채널별로 평균값을 추출한다.

  • 채널이 100개면 GAP를 거치면 추출되는 값도 100개

  • 충분히 채널수가 많을 경우만 적용해야 한다. 적을 때는 성능이 나쁘게 나와서 Flatten이 유리하다.

    • 보통 512개 이상일 때 많다고 한다

  • 성능이 전반적으로 좋아지지만 절대적이지는 않다

    • Flatten에서 발생하는 오버피팅을 줄여주는 효과라고 볼 수 있다.

가중치 규제(Weight Regularization)의 이해와 적용

모델이 Loss를 최적화(줄이는 것)에 지나치게 집중하면 정교화 되는 현상이 발생하기 쉽다. 원래 Loss에 전체 가중치 행렬값의 제곱값을 일정 계수만큼 곱한 값을 더해주면 어느 정도 Loss를 무뎌지게 할 수 있다.

x = Conv2D(filters=64, kernel_size=(3, 3), padding='same', kernel_regularizer=l2(0.00001))(input_tensor)

x = Conv2D(filters=128, kernel_size=3, padding='same', kernel_regularizer=l1_l2(l1=1e-5, l2=1e-4))(x)
  • l1, l2 그리고 l1_l2 를 적용할 수 있다.

  • 규제 값을 너무 크게 하면 성능이 떨어진다.

  • 일반적으로 Conv보다는 Dense에서 많이 적용한다.

  • l1 l2 l1_l2 중에 실험적으로 찾기

Previous데이터 증강의 이해 - Keras ImageDataGenerator 활용NextAI School 1st

Last updated 3 years ago

Was this helpful?

이전에 정리했던 더 자세한 내용은 참조

여기
https://www.tutorialexample.com/initialize-tensorflow-weights-using-xavier-initialization-a-beginner-guide-tensorflow-tutorial/