* 들어가기전
- 모델의 성능 복습
회귀 모델 | MSE, RMSE, MAE | 오차의 양 | |
MAPE | 오차율 | ||
R2 Score | 결정계수 | ||
분류모델 | Confusion matrix |
Accuracy | 정분류율 |
Recall | 재현율 | ||
Precision | 정밀도 | ||
F1-Score | Recall과 Precision 조화평균 |
- 딥러닝 학습 절차
① 가중치 초기값을 할당한다.
② (초기) 모델로 예측한다.
③ 오차를 계산한다 (loss function)
④ 가중치 조절 : 오차를 줄이는 방향아로 가중치를 적절히 조절한다. (optimizer)
- 적절히 조절 => 얼마만큼 조절할 지 결정하는 하이퍼파라미터 : learning rate(lr)
⑤ 다시 처음으로 가서 반복한다.
- 전체 데이터를 적절히 나눠서 (mini batch) 반복 : batch_size
- 데이터를 몇 번 반복학습할 지 결정 : epochs
1. Regression
(1) Input : Input(shape=(,))
- 분석단위에 대한 shape
- 1차원 : (feature, 수)
- 2차원 : (rows, columns)
(2) Output : Dense()
- 예측 결과가 1개 변수(y가 1개 변수)
# 메모리 정리
clear_session()
# Sequential 타입
model = Sequential([Input(shape=(nfeatures,)), # nfeatures => x_train.shape[1]의 값
Dense(1)])
# 모델요약
model.summary()
- nfeatures => input, Dense(1) => output
(3) 컴파일(Compile)
- 선언된 모델에 몇 가지 설정을 한 후, 컴퓨터가 이해할 수 있는 형태로 변환하는 과정
model.compile(optimizer=Adam(learning_rate=0.1),
loss='mse')
# optimizer : 오차를 줄이는 방향으로 가중치를 조정 (Adam 사용_최근 딥러닝에서 가장 성능이 좋음)
# learning_rate => 조정 비율 (걸음걸이의 '보폭'을 조정한다고 표현)
# loss : loss function(오차함수) 오차계산을 무엇으로 할지 설정 (회귀:mse, 분류:cross entropy)
* learning rate : 가중치가 너무 작으면 아주 조금 조정되어 최소값에 도달하지 못할 수 있고
가중치가 너무 크면 loss가 들쑥날쑥해짐
* 보통 learning rate가 적어지면 epochs를 높임! (epochs : 뒤에 설명)
(4) 학습하기
history = model.fit(x_train, y_train, epochs=20, validation_split=.2).history
# epochs : 주어진 train set을 몇 번 학습할 지 결정
# 최적의 값은 케이스마다 다름 (하이퍼파라미터)
# validation_split : train 데이터에서 20%를 검증셋으로 분리 (중간점검용)
# history : 학습을 수행하는 과정 중 가중치가 업데이트 되면서 계산된 오차 기록
(5) 학습곡선 그리기 (학습 경향을 파악)
# 함수로 정의
def dl_history_plot(history):
plt.figure(figsize=(10,6))
plt.plot(history['loss'], label='train_err', marker = '.')
plt.plot(history['val_loss'], label='val_err', marker = '.')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend()
plt.grid()
plt.show()
* 바람직한 학습곡선
① 초기 epoch에서는 오차가 크게 줄고
② 오차 하락이 꺾이면서
③ 점차 완만해짐
=> 그러나 학습곡선의 모양새는 다양함
* 바람직하지 못한 학습곡선
![]() |
![]() |
![]() |
학습이 덜 됨 - epochs를 늘리거나 - learnig_rate를 크게 한다 |
train error 들쑥 날쑥 - 조금씩 update (learning_rate를 작게) |
과적합 - epochs 줄이기 |
2. Hidden Layer
# Sequential 타입 모델 선언 (입력은 리스트로!)
model = Sequential([Input(shape=(n,)),
Dense(2, activation='relu') # hidden layer
Dense(1)])
# 활성함수는 주로 'relu'를 사용 (거의 고정!!)
(1) 활성화 함수
- 현재 레이어(각 노드) 결과값을 다음 레이어(연결된 각 노드)로 어떻게 전달할지 결정/변환해주는 함수
- 선형 -> 비선형으로 만들어야 하는데
- 활성화함수가 없으면 히든 레이어를 아무리 추가해도 그냥 선형회귀(선형모델)이 된다.
① Hidden Layer에서는 선형함수를 비선형 함수로 변환
② Output Layer에서는 결과값을 다른 값으로 변환 (주로 분류모델에서 사용)
(2) hidden layer의 노드수
- 보통 점차 줄여나가지만, 늘렸다가 줄일 수도 있음
'딥러닝' 카테고리의 다른 글
[딥러닝] 언어모델 이해 (1) ChatGPT API로 연결하기 _ 20241105 (8) | 2024.11.05 |
---|---|
[딥러닝] CNN _ 20241104 (0) | 2024.11.04 |
[딥러닝] 딥러닝 모델 저장하기 _ 20241101 (2) | 2024.11.01 |
[딥러닝] 딥러닝 성능관리 _ 20241101 (2) | 2024.11.01 |
[딥러닝] 딥러닝 모델링 (#2. 이진분류, 다중분류) _ 20241031 (4) | 2024.10.31 |