기울기 소실 문제
또 다른 기울기 문제는 기울기가 소실되어 0에 가까워지는 경우예요. 이 문제는 감지하기가 쉽지 않아 더 해결하기 어렵습니다. 손실 함수가 매 스텝마다 개선되지 않는다면, 기울기가 0이 되어 가중치가 업데이트되지 않아서일까요? 아니면 모델 자체가 학습을 잘 못해서일까요?
이 문제는 긴 메모리가 필요한 경우(긴 문장) RNN 모델에서 더 자주 발생합니다.
이번 연습에서는 더 긴 문장을 선택한 IMDB 데이터에서 이 문제를 관찰해 볼 거예요. 데이터는 X와 y 변수에 로드되어 있으며, Sequential, SimpleRNN, Dense 클래스와 matplotlib.pyplot의 별칭 plt도 준비되어 있습니다. 모델은 100 epoch으로 사전 학습되었고, 가중치와 학습 이력은 파일 model_weights.h5와 변수 history에 저장되어 있어요.
이 연습은 강의의 일부입니다
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)
연습 안내
- 모델에
SimpleRNN레이어를 추가하세요. .load_weights()메서드를 사용해 사전 학습된 가중치를 모델에 불러오세요.- 학습 데이터의 정확도(
'acc'속성에 있음)를 플롯에 추가하세요. .show()메서드를 사용해 플롯을 화면에 표시하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Create the model
model = Sequential()
model.add(____(units=600, input_shape=(None, 1)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
# Load pre-trained weights
model.____('model_weights.h5')
# Plot the accuracy x epoch graph
plt.plot(history.history[____])
plt.plot(history.history['val_acc'])
plt.legend(['train', 'val'], loc='upper left')
plt.____()