일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 데이터베이스
- CSS
- 정보처리기사필기
- 정보처리기사실기
- 자바스크립트심화
- JDBC
- 상속
- html/css
- 디버깅
- JSP
- 머신러닝
- 연습문제
- 오블완
- 문자와식
- SQL
- c언어
- 중학1-1
- 파이썬
- 자바 실습
- 딥러닝
- 혼공머신
- 데이터분석
- 개발일기
- 컴퓨터구조
- JSP/Servlet
- 자바스크립트
- 티스토리챌린지
- 중학수학
- 컴퓨터비전
- 자바
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
텍스트를 위한 인공 신경망 7 - LSTM과 GRU 셀 2 : 순환층에 드롭아웃 적용하고 2개의 층 연결하여 GRU 신경망 훈련하기 본문
텍스트를 위한 인공 신경망 7 - LSTM과 GRU 셀 2 : 순환층에 드롭아웃 적용하고 2개의 층 연결하여 GRU 신경망 훈련하기
huenuri 2024. 12. 18. 11:56순환 신경망 마지막 학습이 될 것 같다. 지금 공부하는 책은 기초 과정이니 아직 심화 과정의 책이 남아있지만 말이다.
순환층에 드롭아웃 적용하기
완전 연결 신경망과 합성곱 신경망에는 Dropout 클래스를 사용해 드롭아웃을 적용했다. 이를 통해 모델이 훈련 세트에 너무 과대적합되는 것을 막았다. 순환층은 자체적으로 드롭아웃 기능을 적용한다. SimpleRNN과 LSTM 클래스 모두 dropout 매개변수와 recurrent)dropout 매개변수를 가지고 있다.
dropout 매개변수는 셀의 입력에 드롭아웃을 적용하고 recurrent_dropout은 순환되는 은닉 상태에 드롭아웃을 적용한다. 하지만 기술적인 문제로 인해 recurrent_dropout을 사용하면 GPU를 사용하여 모델을 훈련하지 못한다. 이 때문에 모딜의 훈련 속도가 크게 느려진다. 따라서 여기에서는 droupout만을 사용해 보겠다.
전체적인 모델 구조는 이전과 동일하다. LSTM 클래스에 dropout 매개변수를 0.3으로 지정하여 30%의 입력을 드롭아웃한다.
이 모델을 이전과 동일한 조건으로 훈련하겠다.
검증 손실이 약간 향상된 것 같다. 훈련 손실과 검증 손실 그래프를 그려보겠다.
LSTM 층에 적용한 드롭아웃이 효과를 발휘한 것같다. 훈련 손실과 검증 손실 간의 차이가 좁혀진 것을 확인할 수 있다. 밀집층이나 합성곱 층처럼 순환층도 여러 개를 쌓지 않을 이유가 없다.
2개의 층을 연결하기
케라스의 순환층의 모든 타임스텝의 은닉 상태를 출력하려면 마지막을 제외한 다른 모든 순환층에서 return_sequences 매개변수를 True로 지정하면 된다.
2개의 LSTM 층을 싸았고 모두 드롭아웃을 0.3으로 지정했다. 첫 번째 LSTM 층이 모든 타임스텝(100개)의 은닉 상태를 출력하기 때문에 출력 크기가 (None, 100, 8)로 표시되었다. 이에 반해 두 번째 LSTM 층의 출력 크기는 마지막 타임스텝의 은닉 상태만 출력하기 때문에 (None, 8)이다.
이 모델을 훈련해보겠다.
모델이 잘 훈련되었다. 일반적으로 순환층을 쌓으면 성능이 높아진다. 손실 그래프를 그려서 과대적합이 잘 제어되었는지 확인해 보겠다.
그래프를 보면 과대적합을 제거하면서 손실을 최대한 낮춘 것 같다.
GRU 구조
GRU 신경망 훈련하기
텐서플로가 이런 계산 방식을 사용하는 이유는 GPU를 잘 활용하기 위해서이다. 하지만 대부분 GRU 셀을 소개할 때는 전자의 그림을 사용한다. 널리 통용되는 이론과 구현이 차이 나는 경우가 종종 있다.
GRU 셀을 사용한 순환 신경망을 훈련하겠다.
이렇게 지금까지 .keras로 저장된 파일이 내 드라이브에 저장된다.
LSTM과 GRU 셀로 훈련
이 전에서는 순환 신경망에서 가장 인기 있는 LSTM과 GRU 셀에 대해 배웠다. 또 순환층에 드롭아웃을 적용해 보았고 2개의 순환층을 쌓는 방법에 대해 알아보았다.
이제 가장 좋았던 2개의 순환층을 쌓은 모델을 다시 로드하여 테스트 세트에 대한 성능을 확인해 보겠다. 먼저 테스트 세트를 훈련 세트와 동일한 방식으로 변환한다. 그다음 load_model() 함수를 사용해 파일을 읽고 성능을 계산한다.
단원 마무리 및 확인 문제 풀기
난 이 중에서 생성형 AI에 대해서 깊이 있게 공부해보고 싶어서 이 중에서 한 권을 구매했다. 물론 이 학습을 하기 전에 주문한 것이다. 오늘쯤 책이 도착할 것 같다.
학습을 마치고
이로써 길고 길었던 오늘 새벽부터 오후 12시가 다 되어서 7시간 동안의 RNN 기초 과정을 마친다. 정말 힘든 위기가 많이 있었지만 끝까지 코드를 모두 오류 없이 완수했다는 것이 가장 뿌듯하고 기쁘다.
이 소단원 내용은 무척 길지만 다른 포스트로 분리하지 않고 그냥 하나로 작성했다. 이제 RNN을 좀 더 깊이 있게 공부하는 과정을 시작해 보겠다.
'인공지능 > 딥러닝' 카테고리의 다른 글
순환 신경망(RNN) 2 - 순환 신경망의 활용 : 임베딩, 양방향 RNN, 스태킹 RNN, 순환 드롭아웃 (0) | 2024.12.18 |
---|---|
순환 신경망(RNN) 1 - 순환 신경망과 알고리즘 (0) | 2024.12.18 |
텍스트를 위한 인공 신경망 6 - LSTM과 GRU 셀 1 : LSTM 구조와 LSTM 신경망 훈련하기 (0) | 2024.12.18 |
텍스트를 위한 인공 신경망 5 - 순환 신경망으로 IMDB 리뷰 분류하기 3 : 단어 임베딩 사용하기 및 단원 마무리하기 (0) | 2024.12.18 |
텍스트를 위한 인공 신경망 4 - 순환 신경망으로 IMDB 리뷰 분류하기 2 : 순환 신경망 만들고 훈련하기 <코드 오류 수정하기> (0) | 2024.12.18 |