실습 | LSTM을 이용해 로이터 뉴스 카테고리 분석하기
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM, Embedding from tensorflow.keras.utils import to_categorical from tensorflow.keras.preprocessing import sequence from tensorflow.keras.datasets import reuters from tensorflow.keras.callbacks import EarlyStopping import numpy as np import matplotlib.pyplot as plt # 데이터를 불러와 학습셋, 테스트셋으로 나눕니다. ( , ), ( , ) = reuters.load_data( =1000, =0.2) # 데이터를 확인해 보겠습니다. = np. ( ) + 1 print( , '카테고리') print(len( ), '학습용 뉴스 기사') print(len( ), '테스트용 뉴스 기사') print( [0]) # 단어의 수를 맞추어 줍니다. = sequence.pad_sequences( , =100) = sequence.pad_sequences( , =100) # 원-핫 인코딩 처리를 합니다. = to_categorical( ) = to_categorical( ) # 모델의 구조를 설정합니다. = Sequential() .add(Embedding(1000, 100)) .add(LSTM(100, ='tanh')) .add(Dense(46, ='softmax')) # 모델의 실행 옵션을 정합니다. .compile( ='categorical_crossentropy', ='adam', =['accuracy']) # 학습의 조기 중단을 설정합니다. = EarlyStopping( ='val_loss', =5) # 모델을 실행합니다. = .fit( , , =20, =200, =( , ), =[ ]) # 테스트 정확도를 출력합니다. print("\n Test Accuracy: " % ( .evaluate( , )[1])) # 학습셋과 테스트셋의 오차를 저장합니다. = .history['val_loss'] = .history['loss'] # 그래프로 표현해 보겠습니다. = np. (len( )) plt.plot( , , ='.', ="red", ='Testset_loss') plt.plot( , , ='.', ="blue", ='Trainset_loss') # 그래프에 그리드를 주고 레이블을 표시하겠습니다. plt.legend( ='upper right') plt.grid() plt.xlabel('epoch') plt.ylabel('loss') plt.show()