끄적이는 개발노트
260702_강의 정리 (Tensorflow, Keras) 본문
728x90
Deep Learning · TensorFlow
Tensorflow 2.x 구조와 Keras 정리 — Model부터 Callback까지
- Keras Model 구조(Sequential / Functional)와 5-Step Life-Cycle
- History, Callback, Scikit-learn 연동 방식
- Deployment 구조와 정보 손실·기울기 손실 개념 정리
1. Keras란 무엇인가
"신경망을 정의하는 고수준 API" — 실제 연산은 뒤에서 TensorFlow가 수행
- Keras는 신경망을 정의하는 고수준(high-level) API
- 실제 행렬 연산, gradient 계산 등은 뒤에서 TensorFlow가 처리
- 비유: Keras = 자동차 운전대·계기판, TensorFlow = 엔진 — 사용자는 운전대만 조작하면 엔진이 알아서 동작
💡 새 개념
backend Backend
- TF 2.x부터 Keras가 TensorFlow에 공식 통합됨 (tf.keras)
- loss 계산, gradient 계산, optimizer 업데이트를 TensorFlow 그래프 연산으로 처리
model.compile(loss=..., optimizer=..., metrics=...) 시점에 backend 연결이 설정됨
2. Keras Model 구조 — Sequential vs Functional
Model은 크게 두 가지 방식으로 정의 가능
💡 새 개념
Sequential API
- 레이어를 순서대로 하나씩 쌓는 방식
- 입력 1개 → 출력 1개인 단순 구조에 적합
model = Sequential([layers.Dense(2), layers.BatchNormalization(), layers.Activation('relu')])
Functional API
- 레이어를 함수처럼 호출해 그래프를 직접 구성
- 다중 입력/출력, 분기·병합 구조 가능
이미지 입력과 텍스트 입력을 각각 처리 후 하나로 합치는 멀티모달 모델
Dense layer의 행렬곱 연산
- Dense layer의 핵심 연산은 y = Wx + b
- 가중치 행렬 W와 입력 x의 행렬곱에 편향 b를 더함
입력 벡터가 128차원, 출력이 64개 뉴런이면 W는 (64, 128) 크기 행렬
| 구분 | Sequential | Functional |
|---|---|---|
| 구조 | 선형(순차) | 그래프(분기 가능) |
| 난이도 | 쉬움 | 상대적으로 복잡 |
| 적합한 경우 | 단순 분류/회귀 | 멀티 입출력, 잔차 연결(ResNet 등) |
3. 5-Step Life-Cycle
Keras 모델 개발은 5단계로 정형화됨
1
Define Network
Sequential 또는 Functional 방식으로 레이어를 쌓아 네트워크 구조를 정의
2
Compile Network
loss, optimizer, metrics 지정 — 이 시점에 TensorFlow backend 연결
3
Fit Network
학습 데이터로 모델 훈련 — epoch, batch 지정
4
Evaluate Network
검증/테스트 데이터로 성능 평가
5
Make Predictions
새로운 데이터에 대해 예측 수행
💡 새 개념
epoch vs batch
- epoch: 전체 학습 데이터를 한 번 다 학습에 사용한 횟수
- batch: 한 번의 가중치 업데이트에 사용하는 데이터 묶음 단위
- 비유: 전체 문제집(epoch 단위)을 여러 장(batch 단위)씩 나눠서 푸는 것
데이터 1000개, batch_size=100이면 1 epoch당 10번의 가중치 업데이트 발생
4. History와 Callback
model.fit()은 History 객체를 반환 — 학습 과정의 loss, accuracy 기록 보관
💡 새 개념
Callback 객체
- 학습 도중 특정 시점(매 epoch 끝 등)에 자동 실행되는 함수 묶음
- EarlyStopping: 검증 성능이 더 이상 개선되지 않으면 학습을 조기 종료 (과적합 방지)
- LearningRateScheduler: epoch에 따라 학습률을 동적으로 조정
- ModelCheckpoint: 특정 조건(최고 성능 등) 달성 시 모델 가중치를 자동 저장
callbacks=[EarlyStopping(patience=5), ModelCheckpoint('best.keras')]
참고
· Callback은 fit() 호출 시 리스트로 전달하며, 여러 개를 동시에 사용 가능
· Callback은 fit() 호출 시 리스트로 전달하며, 여러 개를 동시에 사용 가능
5. Scikit-learn 연동 — KerasClassifier / KerasRegressor
Keras 모델을 sklearn의 GridSearchCV, Pipeline과 함께 쓰기 위한 wrapper
💡 새 개념
KerasClassifier / KerasRegressor
- Keras 모델을 sklearn 인터페이스(.fit(), .predict())에 맞게 감싸는 래퍼
- 목적: sklearn의 GridSearchCV로 하이퍼파라미터 탐색, Pipeline으로 전처리와 연결 가능
from scikeras.wrappers import KerasClassifier
주의
· tf.keras.wrappers.scikit_learn은 TF 2.11부터 제거됨(deprecated)
· 레거시 코드에서 이를 보면 별도 라이브러리인 SciKeras로 대체해야 함
· tf.keras.wrappers.scikit_learn은 TF 2.11부터 제거됨(deprecated)
· 레거시 코드에서 이를 보면 별도 라이브러리인 SciKeras로 대체해야 함
6. Deployment 구조
학습된 모델을 저장·배포하는 흐름
- SavedModel: 학습 완료 모델을 직렬화(serialization)한 표준 포맷
- Model Repository로 TensorFlow Hub 활용 가능 (사전학습 모델 공유)
SavedModel
→
TF Serving (서버)
SavedModel
→
TF Lite (모바일·임베디드)
SavedModel
→
TF.js (브라우저·Node.js)
💡 새 개념
확장자 구분
- .keras: TF 2.x 신규 네이티브 저장 포맷 (권장)
- .pb: SavedModel 내부의 그래프 정의 파일 (protobuf 포맷)
7. 정보 손실과 기울기 손실
Forward
정보 손실 (Information Loss)
사진을 압축해서 디테일이 흐려지는 것
- forward pass에서 pooling, 차원 축소 등으로 데이터의 세부 정보가 압축·소실되는 현상
Backward
기울기 손실 (Vanishing Gradient)
긴 전화 릴레이 게임에서 뒷사람일수록 메시지가 왜곡되는 것
- backward pass에서 층이 깊어질수록 gradient가 0에 가까워져 앞쪽 층이 학습되지 않는 현상
두 문제는 인과관계가 아니라 별개의 리스크 — 둘 다 네트워크가 깊어질수록(CNN/RNN 등) 발생 가능성이 커짐
- CNN(공간적 특징 추출) / RNN(순차적 특징 추출) 모두 특징 추출 역할 수행
- 두 네트워크 모두 뒷단에는 최종적으로 FFNN(Dense layer)이 붙어 분류·회귀를 수행
728x90
'머신러닝' 카테고리의 다른 글
| 260703_강의 정리 (CNN) (1) | 2026.07.03 |
|---|---|
| 260702_강의 정리 (Optimizer) (0) | 2026.07.02 |
| 260701_강의 정리 (Tensorflow, FFNN) (0) | 2026.07.01 |
| 260616_강의 정리 (신경망) (0) | 2026.06.16 |
| 260615_강의 정리 (Text Mining) (0) | 2026.06.15 |