Keras:LSTM

Sam (토론 | 기여)님의 2021년 12월 28일 (화) 16:45 판

1 개요

케라스로 LSTM 구현해보기.

2 설계

from keras.models import Sequential

model = Sequential()
# 필요한 층을 더한다.
model.add(LSTM(50, return_sequences=True, input_shape=(50,1)))  # 50개 유닛을 갖는 LSTM층 생성. 일반적으로 50개의 입력이 들어간다.
# input_shape에서 50개를 넣어 1개를 반환받는다는 의미인듯..? 일반적으로 timestamp,feature이라는데.. 
model.add(Dense(1, activation='linear'))  # 일반 뉴런층 1개. 결과가 1개가 나온다.
model.compile(loss='mse', optimizer='rmsprop')  # 손실함수 따위를 결정한다.

2.1 input_shape

인풋 형태는 (타임스템프, feature) 형태이다. 다음과 같이 모양을 다시 잡아주어 형태를 변형한다.(size를 포함하여 정리한 후, 모델 input에서 다시 형태를 정의한다.)

X_train_t = X_train.reshape(배치사이즈, 행갯수, 열갯수)
X_test_t = X_test.reshape(배치사이즈, 행갯수, 열갯수)

마지막의 1은 각 셀 안의 데이터를 개별 처리하기 위한 것.(1이 없으면 한 행의 데이터가 하나의 셀로 처리된다.)

3 옵션

3.1 return_sequences

마지막 시퀀스에서 한 번만 출력할지, 각 시퀀스에서 출력할지 결정. 일반적으로 many to many 문제를 풀 때나 lstm 층을 여러개로 쌓아올릴 때 True를 사용한다.

3.2 stateful

학습샘플의 마지막 상태가 다음 학습 때 입력으로 전달할지 여부를 결정.