59doit
순환신경망 (4) 본문
반응형
LSTM 순환신경망으로 텍스트 분류하기
기본 순환 신경망과 달리 LSTM 셀은 2개의 출력이 순환된다. 그중 하나만 다음 층으로 전달된다.
셀로 순환만 되는 출력을 셀 상태(C)라고 부른다
LSTM 셀에서는 이전 타임 스텝의 은닉 상태 H_p와 셀 상태 C_p를 사용해 계산을 수행
# 1. LSTM 클래스 임포트
from tensorflow.keras.layers import LSTM |
▶
# 2. 임베딩층을 포함하여 LSTM 순환신경망만들기
model_lstm = Sequential() model_lstm.add(Embedding(1000, 32)) model_lstm.add(LSTM(8)) model_lstm.add(Dense(1, activation='sigmoid')) model_lstm.summary() |
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_2 (Embedding) (None, None, 32) 32000 lstm (LSTM) (None, 8) 1312 dense_3 (Dense) (None, 1) 9 ================================================================= Total params: 33,321 Trainable params: 33,321 Non-trainable params: 0 _________________________________________________________________ |
▶
# 3. 모델 훈련하기
model_lstm.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) history = model_lstm.fit(x_train_seq, y_train, epochs=10, batch_size=32, validation_data=(x_val_seq, y_val)) |
▶에포크10, adam 최적화 알고리즘 사용
# 4. 손실그래프와 정학도 그래프 그리기
plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['train_loss', 'val_loss']) plt.show() plt.plot(history.history['accuracy']) plt.plot(history.history['val_accuracy']) plt.ylabel('accuracy') plt.xlabel('epoch') plt.legend(['train_accuracy', 'val_accuracy']) plt.show() |
▶
# 5. 검증세트 정확도
loss, accuracy = model_lstm.evaluate(x_val_seq, y_val, verbose=0) print(accuracy) |
# 0.8309999704360962 |
▶
반응형
Comments