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(0, len(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 |
실제 데이터를 예측하는 과정도 실습해봤다
'기계학습 > 자연어 처리 머신러닝' 카테고리의 다른 글
신문 제목 분류 실습 - 나이브 베이즈 분류기 (0) | 2020.02.14 |
---|---|
스팸 메일 분류기 - 실습 이론 (0) | 2020.02.13 |
LSTM 실습 - 로이터 뉴스 분류기 (0) | 2020.02.12 |
RNN 실습 - 스팸메일 분류기 (0) | 2020.02.12 |
공부정리 (0) | 2020.02.02 |