본문 바로가기
Computer Science/[21-22] ML & DL

[LSTM] LSTM + Fully Connected Layer 두가지 방법

by gojw 2022. 4. 23.

LSTM return_sequences

LSTM의 return_sequences=True는 아웃풋 시퀀스 전체를 다음 layer로 넘긴다. return_sequences=False는 마지막 아웃풋만 다음 layer로 넘긴다. 따라서 더 적은 정보를 담고있기 때문에, accuracy가 떨어진다.

 

y3 = LSTM(128, return_sequences=True)(y2)
x2 = Dense(64, activation='swish')(y3)

# ValueError: Shapes (None, 60) and (None, 1) are incompatible

y3 = LSTM(128, return_sequences=False)(y2)
x2 = Dense(64, activation='swish')(y3)

 

return_sequences=True로 지정하고 Dense layer로 넘겨주면 에러가 발생한다.

 

Flatten()

전체 시퀀스를 Dense layer로 넘겨주고 싶을 때 Flatten()으로 펴서, 차원을 줄여주면 된다. Flatten()은 (n, 60, 128)인 LSTM layer의 아웃풋을 (n, 7680)로 바꿔준다.

 

y3 = LSTM(128, return_sequences=True)(y2)
y = Flatten()(y3)
x2 = Dense(64, activation='swish')(y)

 

LSTM + fully connected layer 만들 때

1. return_sequences=False (마지막 아웃풋만 사용해서 accuracy가 떨어질 수 있음)

2. LSTM과 fully connected layer 사이에 Flatten() layer을 추가

댓글