블로그 카테고리 용도 :
🔎 매주 KT 에이블 스쿨에서 배운 내용을 복습하기 위해
✨5주차 느낀점 :
- activation을 잘 설정하자
- 퍼셉트론과 신경망은 다르다 (퍼셉트론=>단층 // 신경망 => 다층)
- 강사님께서 추천해주신 물고기 책 정말 좋다 (밑바닥부터 시작하는 딥러닝)
[Linear & Logistic Regression]
1. Linear Regression 모델링 과정
# 0. 라이브러리 불러오기
import tensorflow as tf
from tensorflow import keras
import numpy as np
# 0++ 입력신호 출력층 정의
x = np.array(range(20))
y = x * 2 - 1 # => linear
# 1. 세션 초기화 ->이미 만들어진 모델이 있다면 그 모델 없애줘
keras.backend.clear_session()
# 2. 모델 선언
model = keras.models.Sequential()
# 3. 모델 블록 조립
model.add(keras.layers.Input(shape=(1,)))
model.add(keras.layers.Dense(1))
# 4. 컴파일
model.complie(loss='mse', optimizer='adam')
# 5. 모델 학습
model.fit(x, y, epochs=10, verbose=1)
# 6. 모델 예측
model.predict(x).reshape(-1) # -> -1 ? 열 개수 만큼 자동 구조화
2. Logistic Regression (이진 분류 알고리즘)
로지스틱 회귀는 종속 변수가 범주형 데이터를 대상으로 하며
입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 분류기법으로 볼 수 있습니다.
모델링시 선형회귀와의 차이점은 모델 블록을 조립할 때
활성화 함수를 => 'sigmoid'로 해줘야 합니다.
또한 손실함수를 => 'binary_crossentropy' , metrics=['accuracy'] 로 컴파일을 해줘야 합니다.
binary_crossentropy => 분류 손실함수 중 하나로 이진 분류 모델에 사용
✨척도(Metrics) :
모델을 평가 하기 위해서 사용 하는 값
✨척도의 종류 :
[Hidden layers]
신경망을 그림으로 나타내봅시다.
입력층과 출력층 사이에 은닉층이라는게 생겼습니다.
입력층의 결과를 출력층에서 계산하는 퍼셉트론과 달리
중간의 은닉층에서 계산합니다.
그리고 은닉층의 값들을 다시 입력값으로 삼아 출력층의 결과를 산출합니다.
( 더 복잡한 계산을 할 수있다고 하네요..ㅎㅎ )
이 은닉 층은 여러개가 될 수있습니다. 이를 심층 신경망이라고 하고
정교하게 설계할 경우 매우 뛰어난 성능을 발휘한다고 합니다 !
✨ Hidden Layer 활성화 함수
1. ReLU ( Rectified Linear Activation ) => 도출 값 : 0 ~ N
2. Sigmoid ( Logistic Function ) => 도출 값 : 0 ~ 1
3. Tanh ( Hyperboic Tangent ) => 도출 값 : -1 ~ 1
[Functionla API]
함수형 API를 활용하여 모델 구축
- training set / test set / validation set ( x에 대한 전처리 )
- scaling ( min-max // standardization)
- y에 대한 전처리
- 모델링 ( 히든 레이어 사용 )
- early stopping, validation_data
🔔 training set / test set / validation set
# X에 대하여 전처리
# 라이브러리
from sklearn.model_selection import train_test_split
# set 분리
train_x, test_x, train_y, test_y =\
train_test_split(x, y, test_size=0.1, random_state=2023)
train_x, val_x, train_y, val_y =\
train_test_split(train_x, train_y, test_size=0.1, random_state=2023)
🔔 scaling
## scaling
from sklearn.preprocessing import MinMaxScaler
## MinMaxScaler -> 최대값 = 1, 최솟값 = 0 으로 조정
mm_scaler = MinMaxScaler()
# fit + transform ( 데이터 학습하고 적용 )
train_x_mm = mm_scaler.fit_transform(train_x)
val_x_mm = mm_scaler.transform(val_x)
🔔 y에 대한 전처리
# 라이브러리
from tensorflow.keras.utils import to_categorical
# One-hot Encoding
train_y = to_categorical(train_y, class_n) # class_n = len(set(y))
val_y = to_categorical(val_y, class_n)
test_y = to_categorical(test_y, class_n)
🔔 모델링
# 라이브러리
import tensorflow as tf
from tensorflow import keras
## 모델링 : Functional API
# 1번 세션 클리어
keras.backend.clear_session()
# 2번 레이어 엮기
il = keras.layers.Input(shape=(13,))
hl = keras.layers.Dense(64, activation='relu', name='hidden1')(il)
hl = keras.layers.Dense(32, activation='relu', name='hidden2')(hl)
ol = keras.layers.Dense(3, activation='softmax', name='output')(hl)
# 3번 모델의 시작/끝 지정
model = keras.models.Model(il, ol)
# 4번 컴파일
model.compile(loss='categorical_crossentropy', metrics=['accuracy'],
optimizer='adam')
# 요약
model.summary()
🔔 EarlyStopping
=> 너무 많은 epoch는 overfitting을 일으키고 너무 적은 epoch는 underfitting을 일으킨다
이런 상황에서 EarlyStopping을 통해 epoch를 많이 돌린 후, 특정 시점에서 멈추는 것
특정 시점을 어떻게 정하느냐가 EalryStopping의 핵심
# 라이브러리
from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', # 관측 대상
min_delta=0, # 임계값
patience=5, # 관측 대상의 성능 개선이 발생하지 않을 때, 얼마나 더 지켜볼 것인지
verbose=1,
restore_best_weights=True) # 최적의 epoch 가중치로 적용
🔔 학습과 예측
# 학습
model.fit(train_x_sd, train_y, epochs=10000, verbose=1,
callbacks=[es], validation_data=(val_x_mm, val_y))
# 예측
y_pred = model.predict(test_x_sd)
y_pred[:5]
내용이 무지막지 하게 많긴 하네요
오늘 부터 미니프로젝트하면서 실습을 많이 해봐야 할것 같습니다..ㅎㅎ
'KT-AIVLE' 카테고리의 다른 글
[KT-AIVLE 7주차 AI Track] CNN 시각지능 딥러닝 (0) | 2023.03.20 |
---|---|
[KT-AIVLE 6주차 AI Track] 미프2차, 코딩마스터즈 (1) | 2023.03.17 |
[KT-AIVLE 4주차 AI Track] 머신러닝 (0) | 2023.03.17 |
[KT-AIVLE 3주차 AI Track] 미프,코마,웹크롤링 (0) | 2023.03.17 |
[KT-AIVLE 2주차 AI Track] Pandas Library (0) | 2023.03.17 |