[KT AIVLE] 9. 딥러닝(1)

onlyJoon·2023년 2월 27일
0

KT AIVLE

목록 보기
1/31
post-thumbnail

요약

  • 딥러닝에 필요한 라이브러리
  • 선형회귀, 로지스틱 회귀, 멀티클래스 분류에 대한
    - activation(활성화 함수)
    - loss function(손실 함수)
    - Sequential API 구현

용어정리

  • epoch: 학습 데이터를 전부 소진할 횟수 -> 전체 데이터에 대해 학습을 몇번 진행할 것인가?
  • mini batch: 전체 데이터셋을 나누었을 때, 나누어진 데이터셋의 개수
  • batch size: 하나의 미니 배치에 넘겨줄 데이터의 개수(기본값: 32)
  • activation: 활성화 함수
  • loss: 손실 함수. 최적화에 사용되는 목적 함수
  • metics: 훈련 모니터링용 평가지표, 보조지표
    - 회귀: mes, rmse, r2 등
    • 분류: accuracy, recall, precision 등
  • optimizer: 최적화 알고리즘. ex) adam, sgd, rmsprop, adagrad 등

0. 라이브러리

Tensorflow

import tensorflow as tf

Keras

from tensorflow import keras

그 외

  • 데이터를 다루기 위해 필요한 라이브러리가 있다면 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

1. 선형 회귀

1) X, Y

Input layer

  • Input(shape(a, ))
    : a는 input 노드의 수

Output layer

  • Dense(b, activation = 'linear')
    : b는 output 노드의 수, 활성화 함수는 'linear'(기본값, 생략가능)

2) Sequential API 구현

i) 세션 클리어: 이전에 사용한 모델 없애기

keras.backend.clear_session()

ii) 모델 생성

model = keras.models.Sequential()

iii) 레이어 쌓기

model.add(keras.layers.Input(shape = (a, ))) # Input 레이어 추가
model.add(keras.layers.Dense(b)) 			 # Output 레이어 추가
  • Input에서 I가 대문자임을 주의
  • Output이 아닌 Dense 사용

iv) 컴파일

model.compile(loss = 'mse', optimizer = 'adam')
# loss = keras.losses.mean_squared_error 대체 가능
# optimizer = keras.optimizer.Adam() 대체 가능

v) 학습하기

model.fit(x, y, epochs = n, verbose = m)
  • epochs: 학습 진행 횟수
  • verbose: 학습과정표시. 0-생략, 1-전체표시(기본값), 2-요약표시

정리

# 1. 세션 클리어
keras.backend.clear_session()

# 2. 모델 생성
model = keras.models.Sequential()

# 3. 레이어 쌓기
model.add(keras.layers.Input(shape = (a, )))
model.add(keras.layers.Dense(b))

# 4. 컴파일
model.compile(loss = 'mse', optimizer = 'adam')

# 5. 학습하기
model.fit(x, y, epochs = n, verbose = m)

2. 로지스틱 회귀

  • 이벤트가 발생할 확률(0~1 사이의 값)을 구하는 것

1) X, Y

Input layer

  • Input(shape(a, ))

Output layer

  • Dense(b, activation = 'sigmoid)

2) Sequential API 구현

i) ii) v) 선형회귀와 동일

iii) 레이어 쌓기

model.add(keras.layers.Input(shape = (a, )))
model.add(keras.layers.Dense(b, activation = 'sigmoid'))
  • sigmoid: 이진분류에서 주로 사용되는 활성화 함수

iv) 컴파일

model.compile(loss = 'binary_crossentropy', metrics = ['accuracy'], optimizer = 'adam')
  • loss(손실함수) 'binary_crossentropy'는 직관적이지 않기 때문에, metrics(보조지표, 평가지표)를 사용
  • 분류 문제이므로 metrics는 'accuracy'를 사용 (recall, precision도 사용가능)

정리

# 1. 세션 클리어
keras.backend.clear_session()

# 2. 모델 생성
model = keras.models.Sequential()

# 3. 레이어 쌓기
model.add(keras.layers.Input(shape = (a, )))
model.add(keras.layers.Dense(b, activation = 'sigmoid'))

# 4. 컴파일
model.compile(loss = 'binary_crossentropy', 
			  metrics = ['accuracy'],
              optimizer = 'adam')

# 5. 학습하기
model.fit(x, y, epochs = n, verbose = m)

3. 멀티 클래스 분류

  • 이진분류와 달리 활성화 함수로 'sigmoid' 사용 불가

1) X, Y

Input layer

  • Input(shape(a, ))

Output layer

from tensorflow.keras.utils import to_categorical
y = to_categorical(y, k)
  • to_categorical(y, k) 함수를 통해 인코딩을 먼저 해야함.(k는 클래스의 수)
  • Dense(b, activation = 'softmax')

2) Sequential API 구현

i) ii) v) 선형회귀와 동일

iii) 레이어 쌓기

model.add(keras.layers.Input(shape = (a, )))
model.add(keras.layers.Dense(b, activation = 'softmax'))
  • softmax: 멀티 클래스 분류문제에서 주로 사용되는 활성화 함수

iv) 컴파일

model.compile(loss = 'categorical_crossentropy', 
			  metrics = ['accuracy], 
              optimizer = 'adam')
  • binary와 마찬가지로 categorical_crossentropy도 직관적이지 않으므로 보조지표 사용

정리

# 0. 인코딩
y = to_categorical(y, k)

# 1. 세션 클리어
keras.backend.clear_session()

# 2. 모델 생성
model = keras.models.Sequential()

# 3. 레이어 쌓기
model.add(keras.layers.Input(shape = (a, )))
model.add(keras.layers.Dense(b, activation = 'softmax))

# 4. 컴파일
model.compile(loss = 'categorical_crossentropy', 
			  metrics = ['accuracy], 
              optimizer = 'adam')

# 5. 학습하기
model.fit(x, y, epochs = n, verbose = m)

마무리

  • 딥러닝은 '연결주의 학파'의 알고리즘.

  • 딥러닝 프레임워크에는 Tensorflow(구글) vs pyTorch(메타) 양대산맥이 있음.

  • keras는 high level API로 유저친화적이기 때문에 딥러닝을 입문에 배우기 좋음.

  • 딥러닝 실습 과정에서 머신러닝도 같이 적용해보고 비교해보니, 머신러닝 성능이 더 우수했음.

  • 딥러닝 성능을 향상시키는 방법은 아직 배우지 않았기에, 하이퍼파라미터 조정이 중요함을 알 수 있었음.

  • 선형 회귀로지스틱 회귀멀티 클래스 분류
    activation
    (활성화 함수)
    linearsigmoidsoftmax
    loss
    (손실함수)
    msebinary_crossentropycategorical_crossentropy
    metrics
    (평가 지표)
    xaccuracyaccuracy
profile
A smooth sea never made a skilled sailor

0개의 댓글