반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- omtm
- nlp
- 데이터모델링
- 언어지능딥러닝
- OKR
- 파인튜닝
- DACON
- 데이터시각화
- Computer Vision
- 태블로
- 그로스해킹
- fit
- Market
- tableau
- 머신러닝
- 인공지능
- 컴퓨터비전
- 데이콘
- 모델링
- 데이터분석
- 딥러닝
- dl
- 시각화
- pmf
- ERD
- 자연어처리
- product
- productmarketfit
Archives
- Today
- Total
블로그
[딥러닝] #3 성능 관리 본문
반응형
[복습]
- x : feature
- y : target, label
- 열 : 정보, 변수
- 행 분석 단위, 예측 단위
- 위 행렬 구조 들고 데이터 분석
- 모델링을 위한 데이터 구조 만들기
- 모든 셀은 값이 있어야 함 ➔ NaN 조회 ➔ 언제 삭제하는지 ?
- 모든 값은 숫자여야 한다. 범 ➔ 수 , 가변수화
- (필요시) 숫자의 범위 일치 (스케일링)
- 문제 해결 평가 후 AI 서비스 구축 -> MLOps
- scaling : 거리 연산할 때 이상치의 영향을 받지 않기 위해서
- 정규화 ➔ 이상치 많으면 너무 작은 값에 값들이 몰려있는 것처럼 보임
- 표준화 ➔ 이상치 있을 때
- 모델 학습, 최적화 할 때 데이터 크기가 너무 크면 오래 걸려서 y 값을 스케일링 하는 경우도 있음. ➔ 이런 경우 테스트 할 때는 다시 원복시켜야 함
- 오차 계산식 : 분모가 작을수록 값이 커짐
- 시각, 언어, 큰 data, 시계열의 경우 보통 우선 딥러닝을 시도함
[참조]
- Gradient : 기울기(벡터)
- Gradient Decent(경사하강법, optimizer의 기본)
- w의 초기값 설정 w0
- 초기값에서의 기울기(방향) 확인 ➔ 미분 df(w) / dw, w = w0
- 기울기가 -면 x는 오른쪽(+방향)
- 기울기가 +면 x는 왼쪽(-방향)
- w` = w0 - η 편미분
- Vanishing Gradient(기울기 소실)
- 네트워크 깊은 부분으로 갈수록 기울기가 점점 작아져서 가중치가 거의 또는 전혀 업데이트 되지 않게 되는 현상
- 소실 문제 해결을 위한 노력
- 활성화 함수 조정 : ReLU
- 음수 입력 - 0출력, 양수 입력 - 그대로 출력 : 양의 기울기를 유지하여 기울기 소실 문제 완화
- 그 외에도 가중치 초기화 기법, 배치 정규화 등 다양한 기법들이 있음
- 활성화 함수 조정 : ReLU
1. 성능 관리
from keras.callbacks import EarlyStopping
es = EarlyStopping(monitor = 'val_loss', min_delta = 0, patience = 0)
# monitor : 기본값 val_loss
# min_delta : 오차(loss)의 최소값에서 변화량(줄어드는 양)이 몇 이상 돼야하는지 지정(기본값 0)
# patience : 오차가 줄어들지 않는 상황을 몇 번(epoch) 기다려줄건지 지정
model.fit(x_train, y_train, epochs=100, validation_split = .2, callbacks = [es])
# fit 안에 지정
# callbacks : epoch 단위로 학습이 진행되는 동안 중간에 개입할 task 지정
from keras.regularizers import l1, l2
model = Sequential( [Dese(128, input_shape=(nfeatures, ), activation='relu', kernel_regularizer=l1(0.01)),
Dense(64, activation='relu', kernel_regularizer=l1(0.01)),
Dense(32, activation='relu', kernel_regularizer=l1(0.01)),
Dense(1, activation='sigmoid'))] )
- 과적합 (Overfitting)
- 모델의 복잡도 : 학습용 데이터의 패턴을 반영하는 정도
- 모델이 복잡해지면 가짜 패턴(혹은 연관성)까지 학습해버림
- 가짜 패턴 : 학습 데이터에만 존재하는 특이한 성질
- 미리 멈춤 Early Stopping
- epoch가 많으면 과적합 될 수 있음
- Training Set 오차는 계속 감소하는데, Validation Set은 일정 횟수 지나면 오차가 다시 증가하는 형태일 때
- 가중치 규제 Regularization
- L1규제 : Lasso
- 오차함수 = 오차 + λ * ∑|w(가중치)|
- 효과 : 가중치의 절대값의 합을 최소화 ➔ 가중치가 작은 값들은 0으로 만드는 경향
- 규제 강도(일반적인 값의 범위) : 0.0001 ~ 0.1
- L2규제 : Ridge
- 오차함수 = 오차 + λ * ∑ w(가중치)²
- 효과 : 가중치 제곱의 합을 최소화 ➔ 규제 강도에 따라 가중치 영향력을 제어 ➔ 강도가 크면, 큰 가중치가 좀 더 줄어드는 효과, 작은 가중치는 0에 수렴
- 규제 강도 : 0.001 ~ 0.5
- 강도가 높을수록 ➔ 일반화된 모델
- 규제를 모든 Layer에 줄 수도, 노드가 많은 층에만 줄 수도 있음
- L1규제 : Lasso
# 모델 저장하기
# 딥러닝 모델의 메소드로 .save가 제공됨
# 파일이름.h5 파일 저장 (h5 : 하둡파일 형식)
model.save('파일이름.h5')
# 모델 로딩하기
from keras.models import load_model
model = load_model('파일이름.h5')
# 중간 체크포인트 저장하기
# keras.callback.ModelCheckpoint
# 각 epoch마다 모델 저장 가능
cp_path = '/content/{epoch:03d}'
mcp = ModelCheckpoint(cp_path, monitor='val_loss', verbose=1, save_best_only=True)
hist = model.fit(x_train, y_train, epochs=50, validation=.2, callbacks=[mcp]).history
# cp_path : 모델 저장할 경로와 모델 파일 이름
## epoch 번호를 세 자리로 표기 : 첫 번쨰 epoch => 001.h5
# mcp = ModelCheckpoint(cp_path, monitor='val_loss', verbose=1, save_best_only=True)
## validation loss 기준으로 이전 체크포인트의 모델들보다 성능이 개선되면 저장(save_best_only)
더보기
요약
딥러닝 모델 성능 높이기
- 데이터
- 입력 데이터 정제, 적절한 전처리
- 데이터 늘리기 : 적절한 feature 추가, 데이터 건수 늘리기
- 모델 구조
- 은닉층, 노드 수 늘리기 : 성능이 증가할 때까지
- activation
- 학습
- epochs, learning_rate, optimizer
과적합 문제
- 모델링 목적 : 모집단 전체에서 좋은 성능을 내는 적당한 모델 만들기
- 과적합 : 학습 데이터에 대해서만 좋은 성능을 보임
과적합 문제 해결
- 데이터 건수 늘리기
- 모델 복잡도 조절 -> 가중치 규제(Regularization)
- 반복 학습 횟수(epochs) 조절 -> early stopping
모델 저장하기
- 최종 모델 저장
- 체크 포인트에서 모델 저장
- 성능 개선될 경우에만 저장하기 옵션
2. Functional API
- Sequential API
- 순차적으로 쌓아가며 모델 생성
- Input -> Output Layer로 순차적 연결
- Functional API
- 모델을 좀 더 복잡하게 구성할 수 있음
- 모델을 분리해서 사용 가능
- 다중 입력, 다중 출력 구현 가능
- 다중 입력
- 각 입력에 맞는 특징 도출(feature representation) 가능
# Sequential
# Sequential 함수 안에 리스트로 레이어 입력
model = Sequential([Dense(8, input_shape=(nfeatures, ), activation='relu'),
Dense(1)])
# Functional
# Input 함수
# 레이어 : 앞 레이어와 연결 지정
# Model 함수로 시작과 끝 연결해서 선언
il = Input(shape=(nfeatures, ))
hl1 = Dense(8, activation='relu')(il)
ol = Dense(1)(hl1)
model = Model(inputs=il, outputs=ol)
# 다중 입력
# 모델 구성
input1 = Input(shape=(nfeatures1, ), name='input1')
input2 = Input(shape=(nfeatures2, ), name='input2')
# 입력을 위한 레이어
hl1_1 = Dense(10, activation='relu')(input1)
hl1_2 = Dense(20, activation='relu')(input2)
# 두 히든 레이어를 옆으로 합치기 (= pd.concat)
cb1 = concatenate([hl1_1, hl1_2])
# 추가 레이어
h12 = Dense(8, activation='relu')(cb1)
output = Dense(1)(hl2)
# 모델 예측 시, 전처리 된 두 가지 입력을 리스트로 묶어 사용
pred = model.predict([x_val1, x_val2])
728x90
반응형
'공부 > DL' 카테고리의 다른 글
[CV] 시각지능 딥러닝 #1 CNN (Convolutional Neural Networks) (0) | 2024.04.02 |
---|---|
[딥러닝] #4 딥러닝 기반 시계열 모델링 (2) | 2024.03.28 |
[딥러닝] #2 분류 모델링 (0) | 2024.03.22 |
[딥러닝] #1 회귀 모델링 (0) | 2024.03.21 |
[학습] 시계열 예측 모듈 prophet (0) | 2023.10.09 |