이번에는 RNN의 강점이라고 할 수 있는 자연어처리를 해보자
모델에 사용 할 데이터셋은 IMDB 데이터다.
IMDB 사이트에 등록된 리뷰를 긍정인지 부정인지를 분류하는 문제다.
from tensorflow.keras import models,layers,datasets
from tensorflow.keras.preprocessing.sequence import pad_sequences
텐서플로우 2.0 생략하고 자연어처리 실습에 사용될 패키지들이다.
(x_train,y_train),(x_test,y_test) = datasets.imdb.load_data(num_words=10000)
IMDB 데이터셋을 호출하는 코드다.
이번에는 num_words라는 매개변수를 사용했는데 이는 많이 사용되는 단어순으로 가져온다.
10000을 선언하면 많이 사용되는 단어 만 개를 가져온다는 뜻이다.
shape() 명령어를 찍어보면 데이터마다 길이가 다른 것은 알 수 있다.
그래서 패딩을 통해서 길이를 통일 시켜야 한다.
x_train = pad_sequences(x_train,maxlen=500)
pad_sequences(패딩 할 데이터, 최대길이)로 되있고 패딩 이후로 shape() 명령어를 하게 되면 최대길이로 전부 설정되어 있다.
최대 길이에서 부족한 데이터셋은 데이터를 0으로 채워서 맞춘다
model = models.Sequential()
model.add(layers.Embedding(10000,128))
model.add(layers.LSTM(64))
model.add(layers.Dense(1,activation='sigmoid'))
이번에는 모델을 작성해보자
새롭게 임베딩(Embedding)이라는 것이 추가된 것을 알 수 있다
단어와 글을 벡터화를 시키는 것이 임베딩이고 입력레이더 대신 사용한다.
Embedding(단어 갯수, 유닛수)로 설정한다.
IMDB가 분류 문제여서 뉴럴넷에 시그모이드 함수를 사용한다.
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['acc'])
시그모이드 함수를 사용하면 자동으로 크로스엔트로피 로스함수가 사용된다.
옵티마이저는 아담을 사용한다.
바로 학습을 돌려보자
model.fit(x_train,y_train,epochs=1,verbose=1)
작성자 김강빈 kkb08190819@gmail.com / 이원재 ondslee0808@gmail.com
'【5】RNN 기본 다지기 > 실습으로 익히는 순환신경망' 카테고리의 다른 글
LSTM을 이용한 시계열 데이터 분석(실습) (0) | 2020.03.03 |
---|---|
기본 RNN과 LSTM 비교 (0) | 2020.02.17 |