이번에는, 글로벌벡터를 불러오지 않고 그냥 Embedding()을 불러와서 임베딩을 시키는 레이어를 추가해서 훈련합니다. 글로벌임베딩을 쓰는 편이 정확도에는 보통 낫지만 특이한 단어가 많은 특정 도메인의 경우 직접 훈련시키거나 글로벌 임베딩의 값을 바꾸는 식으로 훈련합니다.
In [1]:
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Dropout, Embedding, LSTM, Bidirectional
from keras.datasets import imdb
In [2]:
from keras.layers import CuDNNLSTM
In [3]:
import numpy as np
import pandas as pd
In [4]:
max_features = 20000
maxlen = 100
batch_size = 128
(train_x, train_y), (test_x, test_y) = imdb.load_data(num_words=max_features)
In [5]:
train_x = sequence.pad_sequences(train_x, maxlen=maxlen)
test_x = sequence.pad_sequences(test_x, maxlen=maxlen)
In [6]:
print('train_x shape:', train_x.shape)
print('test_x shape:', test_x.shape)
In [7]:
model = Sequential()
model.add(Embedding(max_features, 128, input_length = maxlen))
model.add(Bidirectional(CuDNNLSTM(64)))
model.add(Dropout(0.5))
model.add(Dense(1, activation = 'sigmoid'))
In [8]:
model.compile('adam', 'binary_crossentropy', metrics=['accuracy'])
In [ ]:
model.fit(train_x, train_y, batch_size = 128, epochs = 4, validation_data=[test_x, test_y])
In [ ]: