다음 그림은 훈련 결과를 시각화한 결과입니다.7
▲ 그림 8-42 훈련과 검증에 대한 정확도와 손실에 대한 시각화
역시 결과가 정상적으로 보이지 않습니다. 검증에 대한 손실(val_loss)이 네 번째 에포크에서 다시 높아지고 있습니다. 정확도(accuracy) 역시 매우 낮습니다.
성능 향상을 위해 LSTM 대신 양방향 RNN(bidirectional RNN)으로 바꾸고 드롭아웃을 적용해 보겠습니다(일반적으로 LSTM보다 양방향 RNN이 성능이 좋습니다).
코드 8-20 드롭아웃이 적용된 모델
model = tf.keras.Sequential([
tf.keras.layers.Embedding(encoder.vocab_size, 64),
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64, return_sequences=True)), ------ LSTM 대신 양방향 RNN 사용
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dropout(0.5), ------ ①
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.summary()
① 드롭아웃을 적용(랜덤하게 노드를 끄는 비율을 0.5(50%)로 적용)하며, 주의할 점은 학습할 때만 드롭아웃을 사용해야 한다는 것입니다. 따라서 정확도(accuracy)를 측정할 때는 모든 노드를 사용해야 합니다.
7 실행 결과가 책의 그래프와 다를 수 있습니다.