끄적이는 개발노트

260702_강의 정리 (Tensorflow, Keras) 본문

머신러닝

260702_강의 정리 (Tensorflow, Keras)

크런키스틱 2026. 7. 2. 09:49
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) 크기 행렬
구분SequentialFunctional
구조선형(순차)그래프(분기 가능)
난이도쉬움상대적으로 복잡
적합한 경우단순 분류/회귀멀티 입출력, 잔차 연결(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() 호출 시 리스트로 전달하며, 여러 개를 동시에 사용 가능
🔗
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로 대체해야 함
🚀
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