ResNet은 깊은 신경망에서 입력을 그대로 우회시키는 residual connection을 사용해 학습 난도를 낮추는 CNN 구조입니다.
원문은 ResNet 개념, z-score 정규화, he_normal initializer, Keras Sequential의 input_shape, predict와 evaluate 차이, LSTM 입력 형태를 함께 정리한 딥러닝 메모입니다.
핵심 정리
ResNet의 핵심은 깊은 네트워크가 전체 변환을 한 번에 배우게 하기보다 입력과 출력의 차이인 residual을 학습하게 만드는 데 있습니다. Keras 실습에서는 모델 구조만큼 입력 데이터의 shape를 맞추는 일이 중요합니다. Dense 층에는 보통 샘플 수와 feature 수 형태의 2차원 입력이 들어가고, LSTM은 샘플 수, timestep, input_dim 형태의 3차원 입력을 기대합니다. 예측값을 얻을 때는 predict를 쓰고, loss와 metric을 함께 계산할 때는 evaluate를 쓰는 식으로 역할을 나눌 수 있습니다.
- ResNet은 residual connection 또는 shortcut connection으로 깊은 네트워크의 최적화 문제를 완화합니다.
- ReLU 계열 활성화 함수를 쓸 때 he_normal 초기화가 함께 언급되는 경우가 많습니다.
- Sequential 모델은 층을 순서대로 쌓는 단순한 Keras 모델 구성 방식입니다.
- Dense 입력은 보통 샘플 수와 feature 수 형태로 맞춥니다.
- LSTM 입력은 샘플 수, timestep, input_dim처럼 시간 축을 포함해 맞춰야 합니다.
- 현재 Keras에서는 predict 결과에 argmax를 적용해 클래스를 고르는 방식이 predict_classes 대체 패턴으로 쓰입니다.
원문은 ResNet, Keras Dense 예제, input_shape, predict와 evaluate, LSTM 입력 shape가 한 글 안에 섞여 있었습니다. 보강 블록은 각 메모가 어떤 질문에 답하는지 먼저 보이도록 구조화했습니다.
이어서 볼 글
- Keras 딥러닝 메모: ResNet, EarlyStopping, he_normal, input_shape - ResNet을 Keras 설정과 학습 옵션까지 함께 보는 글이다.
- Keras 기본 사용법: Sequential, compile, fit 흐름 - Keras 기본 학습 흐름을 확인한 뒤 ResNet 코드를 읽기 좋다.
- 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' 카테고리의 다른 글
| 인공지능 개념 메모: SVM, Bayesian, HMM, Markov (0) | 2026.05.15 |
|---|---|
| Convolution 개념과 CNN 기초 정리 (0) | 2026.05.15 |
| Latent Semantic Indexing(LSI)와 NLP 정리 (0) | 2026.05.13 |
| Keras 딥러닝 메모: ResNet, EarlyStopping, he_normal, input_shape (0) | 2026.05.13 |
| TensorFlow 기본 개념: Tensor, Operator, Placeholder, Session (0) | 2026.05.13 |
