이 글은 ResNet의 skip connection 아이디어부터 Keras의 input_shape, EarlyStopping, he_normal initializer까지 딥러닝 실습 중 헷갈린 지점을 모은 메모입니다.
제목만 보면 ResNet 글처럼 보이지만, 실제 본문은 Keras 모델 구성과 입력 텐서 모양을 함께 다루므로 그 흐름에 맞춰 읽는 것이 좋습니다.
핵심 정리
ResNet의 핵심은 레이어를 깊게 쌓을 때 입력을 일부 경로로 건너뛰게 해 학습이 막히지 않도록 돕는 skip connection입니다. 본문은 여기에서 출발하지만, 실제로는 feature engineering, z-score, EarlyStopping, he_normal, Keras Sequential 모델, Dense 입력 모양, LSTM 입력 모양까지 이어지는 실습 메모입니다. 따라서 하나의 ResNet 설명 글이라기보다는 딥러닝 모델을 만들다가 자주 헷갈리는 설정을 모아둔 글로 보는 편이 정확합니다.
- ResNet은 skip connection을 이용해 깊은 네트워크 학습을 돕는 구조입니다.
- feature engineering과 z-score 같은 입력 정제는 모델 구조만큼 결과에 영향을 줄 수 있습니다.
- he_normal은 ReLU 계열 활성화와 함께 자주 쓰이는 초기화 방법입니다.
- Keras Dense 입력은 보통 샘플 수와 feature 수 형태로 이해하면 됩니다.
- LSTM 입력은 샘플 수, 시간축, feature 차원처럼 순서 정보가 포함된 형태로 다룹니다.
- predict는 예측값을 얻을 때, evaluate는 loss와 metric을 확인할 때 쓰는 흐름으로 구분할 수 있습니다.
원문 제목은 ResNet 하나만 가리켰지만 본문은 Keras 실습 노트 전체에 가깝습니다. 이번 수정은 제목과 첫 문단을 실제 내용에 맞춰 넓혀, 방문자가 기대한 내용과 본문 사이의 어긋남을 줄였습니다.
이어서 볼 글
- ResNet 구조와 Keras 딥러닝 메모 - 같은 ResNet/Keras 주제를 더 구조 중심으로 정리한 글이다.
- Keras 기본 사용법: Sequential, compile, fit 흐름 - Keras 모델 작성 흐름을 먼저 잡는 기초 글이다.
- TensorFlow 기본 개념: Tensor, Operator, Placeholder, Session - Keras가 올라가는 TensorFlow 개념 배경을 보완한다.
네트워크에 변경을 가하는 것 보다 인풋노드를 어떻게 정제해서 사용하는가 하는 피쳐엔지니어링? 이 훨씬중요함을 발견함
z-score 사용이라는 신기한 기법을 배움
ResNet
스킵하는 라인을 뚫는 기법 (그래서 굉장히 딥하게 쌓을 수 있다는 특징이 나오는거 같다)
https://www.analyticsvidhya.com/blog/2017/08/10-advanced-deep-learning-architectures-data-scientists/
위 링크에 나온 설명이 좋은 것 같다.
이 링크도 꼭읽어보자 여러모로 좋은 내용이 들어 있는 것 같다.
EarlyStopping
여기보면 잘나와있음
initializer
he_normal
normal로 했을때 수렴이 잘 안되는데 he_normal로만 바꾸었는데 잘되는 케이스가 있었다.
he_normal에 대해서는 여기 논문 참조
기본 사용법
https://keras.io/getting-started/sequential-model-guide/
model = Sequential() # 걍 써준다.
input_node_cnt = 30
layer1_node_cnt = 1000
layer2_node_cnt = 128
output_node_cnt = 6
model.add(Dense(layer1_node_cnt, activation='relu', input_shape=(input_node_cnt,)))
model.add(Dense(output_node_cnt, activation='sigmoid'))
model.add(Dense(output_node_cnt, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])
헷갈릴 수 있는거는.. input_shape에다가는 input_node_cnt를 먼저적어주는데, 실제로 fit()에 들어갈 인풋의 경우는 ndarray기준으로 다음처럼 (개수, input_node_cnt)로 보인다는 점이다.

predict() vs evaluate() vs predict_classes()
여기 잘 정리돼 있다.
예측된 Y값이 필요할땐 predict를 쓰고
accuracy나 loss를 측정하고 싶을 때는 evalute를 쓴다.
predict_classes()는 predict랑 같은데 argmax()한 인덱스가 나오는 것 같다.
즉 predicted[0]이 [0.1, 0.2, 0.7] 이라면 predicted_classes[0]는 2가 된다.
LSTM
LSTM에서는 인풋의 모양이 좀 달라야 한다. 게다가 Embedding이라는 요소도 들어가는 경우가 있다. 살펴보자.
여기에 따르면 다음처럼 이해할 수 있다고 한다.
Dense의 경우는 nparray기준 (nb_samples, input_node_cnt)형태의 데이터가 input으로 들어가는데..
LSTM의 경우는 (nb_samples, timestep, input_dim)형태의 데이터가 input으로 들어간다.
> 예를 들어 1000개의 문장이 있고, 각 문장은 10개의 단어로 이루어 져 있으며, 각 단어는 3개의 숫자로 이루어진 벡터라고 하면
> (1000, 10, 3)이 되는 것
** 다시말하면 Dense에서 단순히 전체 input_node_cnt가 얼마라고 주는 방식에서.. 몇개씩 끊어서 생각할지 힌트를 준다고 보면 될듯 **
** Dense로 위에걸 준다고 하면 (1000, 30)이 되어서 word구분 없이 떡이 되었을테니 말이야 **
실제로 코드 형태로 보면
Dense의 경우 다음처럼 되는데
model.Add(Dense(first_layer_node_cnt, input_shape=(input_node_cnt, )))
LSTM의 경우 다음처럼 된다.
model.Add(LSTM(first_layer_node_cnt, input_shape=(time_step, input_dim, )))
stacking
stacking을 하려면 아래처럼 return_sequences=True를 반드시 줘야 한댄다.
# to stack recurrent layers, you must use return_sequences=True
# on any recurrent layer that feeds into another recurrent layer.
# note that you only need to specify the input size on the first layer.
model = Sequential()
model.add(LSTM(64, input_dim=64, input_length=10, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(10))
batch normalization
relu같은 경우에 output이 무한대로 커질수 있는데.. 이걸 0~1 사이의 값으로 normalize 해주는거라는 느낌을 받았다.
정확한 개념은 아래 논문 디비바야할듯
https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/
https://keras.io/layers/normalization/
논문: https://arxiv.org/pdf/1502.03167.pdf
instance normalization
배울게 자꾸 늘어간다 ㅠ
batch normalization 비슷한 개념인거 같은데 스타일 트랜스퍼에 쓰이는것 같다는 느낌을 받았다.
논문: https://arxiv.org/pdf/1607.08022.pdf
여기에 보면 다음처럼 설명 나와있다.
> As discussed in the paper Instance Normalization: The Missing Ingredient for Fast Stylization by Dmitry Ulyanov, Andrea Vedaldi, and Victor Lempitsky, replacing batch normalization with instance normalization significantly improves the quality of feedforward style transfer models.
추가할 내용 들
xor sample
concatenate, merge 관련..차이점?
rnn에서 인풋 차원이 왜 늘어나야 하는지 기술
cnn하는 방법
lstm에서 embedding layer 쓰는 법
'AI, ML' 카테고리의 다른 글
| ResNet과 Keras 메모: residual connection, input_shape, predict/evaluate (0) | 2026.05.15 |
|---|---|
| Latent Semantic Indexing(LSI)와 NLP 정리 (0) | 2026.05.13 |
| TensorFlow 기본 개념: Tensor, Operator, Placeholder, Session (0) | 2026.05.13 |
| Neural Network 기본 개념: MNIST, Cost Function, Gradient Descent (0) | 2026.05.11 |
| MDP 개념 정리: Markov Decision Process, Policy, Reward (0) | 2026.05.11 |
