데이터 분석

Keras Sequential 모델에서 input_shape를 써야 하는 이유 — 한눈에 보는 차이와 구조 비교

The Ohgorithm 2025. 10. 16. 21:46
model = Sequential()
model.add(layers.Dense(64, activation="relu"))
model.add(layers.Dense(32, activation="relu"))
model.add(layers.Dense(2, activation="softmax"))

 

model = Sequential()
model.add(layers.Dense(64, activation="relu", input_shape=(X_train.shape[1],)))
model.add(layers.Dense(32, activation="relu"))
model.add(layers.Dense(2, activation="softmax"))

model.summary()  # 입력 shape가 명확히 표시됨

 

두 코드는 겉보기엔 거의 같지만, “입력층(input layer)” 정의 방식에서 중요한 차이가 있습니다.
아래에서 단계별로 쉽게 설명드릴게요.


✅ 1️⃣ 공통점

두 코드 모두 3개의 Dense 층(완전연결층)을 쌓은 Sequential 신경망입니다.
출력층(Dense(2, activation="softmax"))이 있으니 2클래스 분류 문제임도 같아요.


⚙️ 2️⃣ 차이점 핵심 — input_shape 명시 여부

 

구분 코드 1 코드 2
입력 크기 지정 ❌ 없음 ✅ 있음 (input_shape=(X_train.shape[1],))
첫 번째 층 동작 Keras가 자동 추론 Keras가 명시적으로 고정
모델 요약(model.summary()) 입력 shape가 (None, 64)로 바로 안 뜸 입력 shape가 (None, feature수)로 명확히 뜸
실전 사용 시 fit할 때 자동 추정 (데이터 한 번 통과 필요) 미리 구조 확정 가능 (더 안정적)

💡 예시 비교

❌ input_shape 없는 경우

model = Sequential()
model.add(layers.Dense(64, activation="relu"))
model.add(layers.Dense(32, activation="relu"))
model.add(layers.Dense(2, activation="softmax"))
  • fit() 시 첫 데이터를 보고 입력 크기를 자동 추론합니다.
  • 그 전까지는 모델이 “입력 차원 몇인지 모르는 상태”예요.

 

✅ input_shape 있는 경우

model = Sequential()
model.add(layers.Dense(64, activation="relu", input_shape=(X_train.shape[1],)))
model.add(layers.Dense(32, activation="relu"))
model.add(layers.Dense(2, activation="softmax"))

model.summary()  # 입력 shape가 명확히 표시됨
  • 모델을 만드는 순간부터 입력 형태가 고정되므로
    model.summary()로 구조 확인이 가능하고,
    다른 사람에게 공유하거나 모델을 저장할 때도 안전합니다.

📘 3️⃣ 정리

 

항목 input_shape 생략 input_shape 명시
입력 크기 설정 자동 감지 수동 지정
모델 요약 표시 입력 없음(None) 입력 명시됨
초기에 가중치 생성 fit 시점 모델 생성 시점
추천 여부 간단한 실험용 실무 / 교육용 모두 권장 ✅

✨ 결론

input_shape=(X_train.shape[1],) 을 넣으면
모델의 입력 구조가 명확히 정의되어,
디버깅·시각화·저장 시 더 안전하고 권장되는 방식입니다.