일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 연습문제
- 중학1-1
- 상속
- JDBC
- CSS
- 티스토리챌린지
- 자바 실습
- 데이터분석
- 정보처리기사실기
- 디버깅
- 자바
- 자바스크립트심화
- rnn
- 순환신경망
- 컴퓨터구조
- 컴퓨터비전
- 머신러닝
- c언어
- JSP
- 혼공머신
- 딥러닝
- 중학수학
- html/css
- 파이썬
- 정보처리기사필기
- 데이터베이스
- 자바스크립트
- 오블완
- SQL
- JSP/Servlet
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
텍스트를 위한 인공 신경망 5 - 순환 신경망으로 IMDB 리뷰 분류하기 3 : 단어 임베딩 사용하기 및 단원 마무리하기 본문
텍스트를 위한 인공 신경망 5 - 순환 신경망으로 IMDB 리뷰 분류하기 3 : 단어 임베딩 사용하기 및 단원 마무리하기
huenuri 2024. 12. 18. 09:50이어서 단어 임베딩을 사용하는 방법에 대해서 공부해 보겠다. 이것만 하면 2단원 학습은 마치게 된다.
단어 임베딩 사용하기
순환 신경망에서 틱스트를 처리할 때 즐겨 사용하는 방법은 단어 임베딩이다. 단어 임베딩은 각 단어를 고정된 크기의 실수벡트로 바꾸어 준다.
이런 오류가 떠서 코드를 이처럼 수정했다. 경고 메시지 Argument input_length is deprecated는 Embedding 레이어에서 input_length를 명시할 필요가 없다는 뜻이다. TensorFlow 및 Keras의 최신 버전에서는 입력 데이터의 길이를 자동으로 인식한다.
그다음 SimpleRNN 층과 Dense 층은 이전과 동일하다.
하지만 출력 결과 0으로 나온다. model2.summary() 결과에서 Output Shape가 '?'로 표시되고 Param #가 0인 이유는 모델이 아직 입력 데이터의 크기를 인식하지 못했기 때문이다.
Keras 모델은 입력 데이터가 실제로 모델에 전달될 때 비로소 레이어의 출력 크기와 파라미터 수를 계산한다. 즉, 모델이 아직 빌드되지 않은 상태라는 뜻이다. 이 상태를 "unbuilt"라고 한다.
해결 방법
모델을 명시적으로 빌드하거나 첫 번째 레이어에 Input 객체를 추가해 입력 크기를 고정하면 해결된다.
방법 1 : Input 객체 사용 (권장)
Input() 객체를 사용해서 입력 크기를 명시하면 모델이 즉시 빌드된다.
방법 2 : 모델 빌드 명시
build() 메서드를 사용해 모델을 명시적으로 빌드할 수도 있다.
model2.build(input_shape=(None, 100)) # 입력 배치 크기와 시퀀스 길이 지정
model2.summary()
책에서는 31번째에서 끝났는데 내가 실행한 코드는 26번째에서 끝났다. 난 원-핫 인코딩을 사용하지 않았기 때문에 그런 것 같다.
단원 마무리 및 확인 문제 풀기
학습을 마치고
앞 절에서 배웠던 순환 신경망의 개념을 실제 모델을 만들어 보면서 구체화해 보았다. 텐서플로와 케라스는 완전 연결 신경망, 합성곱 신경망뿐 아니라 다양한 순환층 클래스를 제공하기 때문에 손쉽게 순환 신경망을 만들 수 있다.
이번 절에서는 순환 신경망의 MNIST 데이터셋으로 생각할 수 있는 유명한 IMDB 리뷰 데이터셋을 사용했다. 이 작업은 리뷰의 감상평을 긍정과 부정으로 분류하는 이진 분류 작업이다.
두 가지 모델을 훈련했다. 먼저 입력 데이터를 원-핫 인코딩으로 변환하여 순환층에 직접 주입하는 방법을 사용했다. 두 번째는 정수 시퀀스를 그대로 사용하기 위해 모델 처음에 Embedding 층을 추가했다. 단어 임베딩은 단어마다 실수로 이루어진 밀집 텍터를 학습하기 때문에 단어를 풍부하게 표현할 수 있다.
정말 어려운 공부를 마쳐서 감사하다. 오늘 새벽 5시부터 공부를 시작해서 2단원까지 5시간 가까이 한 끝에 겨우 마칠 수 있었다. 언어지능 생각보다 어려운 것 같다.