Hippo's data
RNN(Recurrent Neural Network) 순환 신경망 구현 본문
오늘은 DNN, CNN에 이어 딥러닝 모델 중 하나인 RNN(Recurrent Neural Network) 순환 신경망을 구현해보도록 하겠습니다
RNN은 입출력을 시퀀스(sequence) 단위로 처리하는 모델인데요 즉, 순서가 있는 문제에 주로 사용되는데요
시계열 처리, 자연어 처리 / 이미지 주석생성, 언어모델링, 음성인식 등에 주로 활용됩니다
DNN에 비해 hidden layer를 위와 옆(두방향)으로 이어진다는 것이 큰 특징입니다
<RNN 구조들>
one to many -> 사진 설명 붙이기
many to one -> 감성분류(Positive / negative)
many to many -> 번역
## RNN 문제점 -> 기울기 소실(Gradient Vanishing)
-> 역전파시 Gradient가 점점 줄어들어 학습능력 크게 저하됨
-> LSTM (Long Short-Term Memory, 장단기 메모리) 등장
< RNN, LSTM 차이점 >
-> LSTM은 기존 RNN의 hidden layer + cell state를 통해 기억해야할 정보를 전달함
-> 시계열데이터, 자연어 처리시 더 자주 사용됨
< RNN 모델링>
1) 불러오기
2) 모델 생성
3) 모델 학습
1) 불러오기
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.layers import LSTM
X_train = X_train.reshape(-1, 5, 1) # 3차원 형식으로 변경필요
X_test = X_test.reshape(-1, 5, 1)
2) 모델 생성
model = Sequential() # 틀을 만듦
model.add(LSTM(4, activation='relu', return_sequences=True, input_shape=(5, 1)))
# return_sequences=False ->many to one / True ->many to many
model.add(LSTM(3, activation='relu', return_sequences=True))
model.add(Flatten()) # 1차원으로 쭉 핌
model.add(Dense(1, activation='sigmoid')) # 이진분류
# 모델 컴파일
model.compile(optimizer='adam',
loss='binary_crossentropy', # 이진분류
metrics=['accuracy'])
3) 모델 학습
history = model.fit(x=X_train, y=y_train,
epochs=10 , batch_size=128,
validation_data=(X_test, y_test),
verbose=1
)
losses = pd.DataFrame(model.history.history) # 데이터 프레임 형식으로 지표 결과 보여주기
# 모델 구조 확인
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm (LSTM) (None, 5, 4) 4352
_________________________________________________________________
lstm_1 (LSTM) (None, 5, 3) 3136
_________________________________________________________________
flatten_1 (Flatten) (None, 15) 0
_________________________________________________________________
dense_1 (Dense) (None, 1) 9
=================================================================
Total params: 9,809
Trainable params: 9,809
Non-trainable params: 0
'DL(Deep Learning)' 카테고리의 다른 글
[딥러닝] Linear regression, Logistic regression (0) | 2024.04.20 |
---|---|
CNN(Convolutional Neural Network) 합성곱 신경망 구현 (2) | 2024.01.10 |
DNN(Deep Neural Network) 심층 신경망 구현 (2) | 2024.01.09 |