실습 | LSTM과 CNN을 조합해 영화 리뷰 분류하기
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Activation, Embedding, LSTM, Conv1D, MaxPooling1D from tensorflow.keras.datasets import imdb from tensorflow.keras.preprocessing import sequence from tensorflow.keras.callbacks import EarlyStopping import numpy as np import matplotlib.pyplot as plt # 데이터를 불러와 학습셋, 테스트셋으로 나눕니다. ( , ), ( , ) = imdb.load_data( =5000) # 단어의 수를 맞춥니다. = sequence.pad_sequences( , =500) = sequence.pad_sequences( , =500) # 모델의 구조를 설정합니다. = Sequential() .add(Embedding(5000, 100)) .add(Dropout(0.5)) .add(Conv1D(64, 5, ='valid', ='relu', =1)) .add(MaxPooling1D( =4)) .add(LSTM(55)) .add(Dense(1)) .add(Activation('sigmoid')) # 모델의 실행 옵션을 정합니다. .compile( ='binary_crossentropy', ='adam', =['accuracy']) # 학습의 조기 중단을 설정합니다. = EarlyStopping( ='val_loss', =3) # 모델을 실행합니다. = model.fit(X_train, y_train, =40, =100, =0.25, =[ ]) # 테스트 정확도를 출력합니다. print("\n Test Accuracy: " % (model.evaluate(X_test, y_test)[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()