일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트
- 상속
- 딥러닝
- 정보처리기사필기
- c언어
- 순환신경망
- ChatGPT
- JDBC
- 데이터베이스
- 자바스크립트심화
- 중학수학
- 자바
- 중학1-1
- JSP/Servlet
- 머신러닝
- html/css
- 데이터분석
- 컴퓨터구조
- 혼공머신
- 정보처리기사실기
- 파이썬
- CSS
- 컴퓨터비전
- SQL
- 개발일기
- rnn
- 자바 실습
- 연습문제
- JSP
- 디버깅
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
텍스트를 위한 인공 신경망 4 - 순환 신경망으로 IMDB 리뷰 분류하기 2 : 순환 신경망 만들고 훈련하기 <코드 오류 수정하기> 본문
텍스트를 위한 인공 신경망 4 - 순환 신경망으로 IMDB 리뷰 분류하기 2 : 순환 신경망 만들고 훈련하기 <코드 오류 수정하기>
huenuri 2024. 12. 18. 09:40순환 신경망을 훈련하는 내용을 학습해 보겠다.
순환 신경망 만들기
책에 있는 코드 오류가 너무 많아서 다시 이전의 학습했던 코드를 수정하고 다시 만들어보기로 했다.
이제 드디어 출력이 잘 되었다.
순환 신경망 훈련하기
에러 메시지 "ValueError: The filepath provided must end in .keras (Keras model format). Received: filepath=best-simplernn-model.h5"는 ModelCheckpoint 콜백에 제공된 filepath 인자가 올바른 형식이 아님을 나타낸다. Keras는 전체 모델을 저장할 때 파일 경로가 '.keras'로 끝나기를 기대한다. 사용자 코드에서 파일 경로는 'best-simplernn-model.h5'이며 '.h5'로 끝나므로 오류가 발생한다.
코드 수정하기
이 코드가 실행이 안되고 세션이 계속 다운이 되어 몇 시간을 고민하며 수십 번 도전했는지 모른다. 이제 해결이 되어서 해결 방법과 함께 코드를 붙여본다.
세션이 종료되는 문제는 보통 메모리 부족(Out of Memory, OOM) 때문에 발생한다. 특히 원-핫 인코딩 된 데이터인 train_oh와 val_oh가 너무 커서 GPU나 RAM 메모리를 초과할 가능성이 크다.
문제 원인
- 원-핫 인코딩 사용
train_oh와 val_oh는 원-핫 인코딩된 데이터로, IMDB 데이터셋에서 단어 수(num_words=500)를 기준으로 각 단어가 500 차원의 벡터로 변환된다.
따라서 데이터셋의 크기가 (samples, 100, 500) 형태가 되어 매우 커진다.- 예: 10,000개의 샘플 → 약 500MB 이상의 메모리를 차지할 수 있다.
- RNN 레이어 특성
SimpleRNN은 시간 단계가 길수록 메모리 사용량이 증가한다. 원-핫 인코딩과 함께 사용하면 부담이 커져서 세션이 종료될 수 있다.
해결 방법
원-핫 인코딩 대신 정수 인코딩 사용
원-핫 인코딩 대신 단어의 정수 인덱스를 그대로 사용할 수 있다. 이렇게 하면 메모리 사용량이 대폭 줄어든다.
처음으로 모델 훈련이 되었다. 이 훈련은 10번 만에 조기 종료되었다. 책에서는 38번째에 에포크까지 진행되었다. 검증 세트에 대한 정확도는 약 80%로 정도이다. 매우 뛰어난 성능은 아니지만 감상평을 분류하는데 어느 정도 성과를 내고 있다고 판단할 수 있다.
이제 훈련 손실과 검증 손실을 그래프로 그려 살펴보겠다.
훈련 손실은 꾸준히 감소하고 있지만 거증 손실은 감소가 점차 둔해진다. 여기서 한 가지 생각할 점이 있다. 이 작업을 하기 위해 입력 데이터를 원-핫 인코딩으로 변환했다. 원-핫 인코딩의 단점은 입력 데이터가 엄청 커진다는 것이다.
토큰 크기를 300차원으로 늘렸기 때문에 대략 300배가 커진다. 이른 좋은 방법이 아니다.
학습을 마치고
이 문제를 해결하는데 얼마나 힘들었는지 모른다. 정말 포기하려고 했었고 RNN 공부는 여기서 마쳐야 되나 했었다. 하지만 문제를 끈질기게 물고 늘어지면서 내가 포기하지 않자 마침내 해결할 수 있었다.
공부는 이렇게 하는 것 같다. 그러면서 많이 배웠다.
'인공지능 > 딥러닝' 카테고리의 다른 글
텍스트를 위한 인공 신경망 6 - LSTM과 GRU 셀 1 : LSTM 구조와 LSTM 신경망 훈련하기 (0) | 2024.12.18 |
---|---|
텍스트를 위한 인공 신경망 5 - 순환 신경망으로 IMDB 리뷰 분류하기 3 : 단어 임베딩 사용하기 및 단원 마무리하기 (0) | 2024.12.18 |
텍스트를 위한 인공 신경망 3 - 순환 신경망으로 IMDB 리뷰 분류하기 1 : IMDB 리뷰 데이터셋과 순환 신경망 만들기 (0) | 2024.12.18 |
텍스트를 위한 인공 신경망 2 - 순차 데이터와 순환 신경망 2 : 셀의 가중치와 입출력 (0) | 2024.12.17 |
텍스트를 위한 인공 신경망 1 - 순차 데이터와 순환 신경망 1 : 순차 데이터와 순환 신경망 (0) | 2024.12.17 |