티스토리 뷰
1. 모델 구조(층) 생성: Sequentail 또는 FunctionAPI
1) Sequentail: 모델이 단순하고 순차적인 구조가 필요한 경우
import tensorflow as tf
# 1: Sequentail
model = tf.keras.models.Sequentail([
tf.keras.layers.Dense(64, activation='relu', input_dim=8), # 첫번째 노드
tf.keras.layers.Dense(1, activation='sigmoid'), # 마지막 레이어는 항상 예측 결과(0과 1로 예측할거면 1)
])
2) FunctionAPI: 복잡한 구조(병렬/스킵, 연결, 다중 입력/출력)가 필요한 경우
import tensorflow as tf
# 2: FunctionAPI
input = tf.keras.layers.Input(shape=(8,))
X = tf.keras.layers.Dense(64, activation='relu')(input)
output = tf.keras.layers.Dense(1, activation='sigmoid')(X)
model = tf.keras.models.Model(inputs= input, outputs=output)
2. 모델 학습 관련 설정(최적화 함수, 손실함수, 평가지표): model.compile
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
1) Optimizer(최적화함수): 모델의 가중치 설정(손실 함수 최소화 역할), 주로 경사하강법에 기반한 알고리즘
- SGD(Stochastic Gradient Descent): 무작위로 일부 데이터를 사용해 기울기 계산
- Momentum: 이전 단계의 기울기를 가속도로 활용, SGD보다 빠르게 수렴하고 싶을때
- RMSProp: 학습률을 동적으로 조정, 각 방향의 기울기를 따로 조정해 진동 감소, RNN등 시계열 모델에 효과적
- adam(Adaptive Moment Estimation) : RMSProp와 Momentum의 장점을 결합, 기본적으로 가장 많이 사용
- adagrad: 희소한 특징에 적합, 학습률이 점점 줄어듦, 자연어처리나 희소데이터에 적합
2) Loss(손실함수): 모델 학습을 위한 가중치 최적화 목표, 모델이 얼마나 잘못된 예측을 하는지 측정
- 회귀 문제: MSE(평균제곱오차), MAE(평균절대오차), Huber Loss
- 이진 분류: Binary Crossentropy
- 다중 클래스: Categorical Crossentropy(클래스가 원핫인코딩 된 경우), Sparse Categorical Crossentropy(원핫인코딩X)
- 확률 분포 간 차이 비교: KL Divergence
3) Metrics(평가지표): 학습 후 모델의 성능 측정
- 회귀: MSE< MAE, R-squared
- 분류: Accuracy, Precision, Recall, F1 score, ROC-AUC
- 시계열: MASE(Mean Absolute Scaled Error)
3. 모델 학습: model.fit
model.fit(X_train, y_train, epochs=몇 번 학습시킬지)
- 주요 파라미터
1) epochs: 전체 데이터셋을 몇 번 반복해서 학습할지를 결정
* batch: 데이터를 나눠 학습하는 작은 단위
*epochs를 사용하는 이유: 초기 학습에서는 가중치가 랜덤으로 설정되어 있으므로 데이터의 패턴을 충분히 파악하지 못하지만, epoch이 진행될수록, 모델은 이전 epoch에서 학습한 정보를 바탕으로 데이터의 패턴을 점점 더 잘 학습한다.
너무 많이 반복하면 과적합이 발생할 수 있어서 EarlyStopping 등을 이용해 적절한 학습 횟수를 정해야 한다.
2) batch_size: 몇 개의 샘플 단위로 나눠서 학습할 지 설정, 미니배치 경사하강법
- 큰 데이터셋에서는 데이터 전체를 한번에 학습 할 경우 메모리 부족 문제 발생 가능
3) callbacks: 학습 과정 중 특정 조건에서 실행될 작업(콜백 함수)를 설정
- EarlyStopping: 학습 중 검증 손실이 개선되지 않으면 조기 종료
- ModelCheckpoint: 학습 중 가장 좋은 성능의 모델을 저장
- ReduceLROnPlateau: 검증 성능이 개선되지 않으면 학습률을 줄임
4) validation_data: 별도의 검증 데이터셋이 있을때
5) validation_split: 별도의 검증 데이터셋이 없지만 검증하고 싶을때
6) shuffle: 학습 데이터의 순서를 랜덤으로 섞을지 여부(시계열의 경우 섞지 말아야 한다)
4. 예측 및 평가
#평가
loss, accuracy = model.evaluate(X_test, y_test)
# 예측
prediction = model.predict(new_data)
'AI > 딥러닝' 카테고리의 다른 글
[딥러닝] 언제 딥러닝이 필요할까? (1) | 2024.11.29 |
---|---|
[딥러닝] 신경망 도식화, 가중치, 활성함수, 경사하강법, 역전파 알고리즘 (1) | 2024.11.28 |
[딥러닝] 신경망 모델 비교, Tensorflow 예시 (3) | 2024.11.28 |
[딥러닝] 신경망 Neural Network (0) | 2024.11.19 |
[딥러닝] 1.데이터셋준비 - kaggle 파일 colab에서 다운, 압축해제 (0) | 2024.11.18 |
- Total
- Today
- Yesterday
- 뉴스
- 스크랩
- 고득점 Kit
- 습관
- C언어
- 영어회화
- Ai
- 빅데이터 분석기사
- 오블완
- Python
- ChatGPT
- 오픽
- llm
- SQL
- 다이어트
- 루틴
- 줄넘기
- 운동
- 실기
- 미라클모닝
- 아침
- 경제
- 아침운동
- 갓생
- IH
- 30분
- 프로그래머스
- 티스토리챌린지
- 기초
- opic
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |