본문 바로가기
기계학습/자연어 처리 머신러닝

IMDB 실습 - LSTM 모델

by tryotto 2020. 2. 12.
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
32
33
from tensorflow.keras.datasets import imdb
import numpy as np
 
(X_train, Y_train), (X_val, Y_val) = imdb.load_data(num_words=1000)
vocab_size = 1000
 
 
 
from tensorflow.keras.preprocessing.sequence import pad_sequences
 
# 데이터 전처리 - padding
max_len = 0
for s in X_train:
  tmp_len = len(s) 
  if tmp_len > max_len :
    max_len = tmp_len
 
X_train = pad_sequences(X_train, maxlen=max_len)
X_val = pad_sequences(X_val, maxlen=max_len)
 
 
 
# 모델 설계
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Embedding
 
model = Sequential()
model.add(Embedding(vocab_size, 32))
model.add(LSTM(32))
model.add(Dense(1, activation='sigmoid'))
 
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])
model.fit(X_train, Y_train, batch_size=1000, epochs=5, validation_data=[X_val, Y_val])
cs



아주 간단한 실습이었다


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
32
33
34
35
36
37
import random
 
# 임의의 샘플 케이스 뽑기
idx = random.randint(0len(X_val))
 
little_test_X = X_val[idx:idx+1]
little_test_Y = Y_val[idx:idx+1]
 
 
# 예측하기
predict_Y = model.predict(little_test_X)
 
 
# 원문 변환을 위한 배열 구축
word_to_index = imdb.get_word_index()
index_to_word = {}
for word, index in word_to_index.items():
  index_to_word[index] = word
 
 
# 원문으로 변환
rst_str = "원문 : "
for num in little_test_X[0]:
  if num == 0:
    continue
  rst_str += index_to_word[num] + " "
print(rst_str)
 
 
# 스팸인지 확인
if predict_Y[0>= 0.5:
  print("prediction : 스팸메일 입니다")
else:
  print("prediction : 스펨메일이 아닙니다")
 
print("real value: 스펨메일 입니다"if little_test_Y[0]==1 else print("real value : 스펨메일이 아닙니다")
 
cs


실제 데이터를 예측하는 과정도 실습해봤다