Skip to content

Latest commit

 

History

History
76 lines (63 loc) · 1.98 KB

File metadata and controls

76 lines (63 loc) · 1.98 KB

IMDB 감성 분류 작업에서 순환 합성곱 네트워크를 학습.

2회 반복 후 테스트 정확도가 0.8498에 다다른다. K520 GPU에서 41초/에폭.

from __future__ import print_function

from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import LSTM
from keras.layers import Conv1D, MaxPooling1D
from keras.datasets import imdb

# 임베딩
max_features = 20000
maxlen = 100
embedding_size = 128

# 합성곱
kernel_size = 5
filters = 64
pool_size = 4

# LSTM
lstm_output_size = 70

# 학습
batch_size = 30
epochs = 2

'''
참고:
batch_size 는 굉장히 예민하다.
데이터셋이 매우 작으므로 2 에폭만 필요함.
'''

print('Loading data...')
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
print(len(x_train), 'train sequences')
print(len(x_test), 'test sequences')

print('Pad sequences (samples x time)')
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)
print('x_train shape:', x_train.shape)
print('x_test shape:', x_test.shape)

print('Build model...')

model = Sequential()
model.add(Embedding(max_features, embedding_size, input_length=maxlen))
model.add(Dropout(0.25))
model.add(Conv1D(filters,
                 kernel_size,
                 padding='valid',
                 activation='relu',
                 strides=1))
model.add(MaxPooling1D(pool_size=pool_size))
model.add(LSTM(lstm_output_size))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

print('Train...')
model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          validation_data=(x_test, y_test))
score, acc = model.evaluate(x_test, y_test, batch_size=batch_size)
print('Test score:', score)
print('Test accuracy:', acc)