노트/Python : 프로그래밍
[케라스] 영화리뷰 긍정부정 분류하기
Diane_
2020. 4. 22. 13:49
IMDB 데이터 로드
from keras.datasets import imdb
(trainData, trainLabel),(testData, testLabel)= imdb.load_data(num_words=10000)
# 자주 사용된 1000개 단어 만 추출 사용
wordIndex= imdb.get_word_index()
# 단어의 Index 호출
rev_wordIndex=dict([(value,key) for (key,value) in wordIndex.items() ])
# 단어, 갯수 dict 형태로 저장
# i가 0,1,2,3 일때는 "?"를 get (쓸모없는 데이터 제거 )
decReview= " ".join([rev_wordIndex.get(i-3,"?") for i in trainData[0]])
# 동일한 길이의 리스트가 되도록 패딩 작업 수행
# 원핫인코딩
def vec_seq(data, dim=10000):
res = np.zeros((len(data),dim))
for i,s in enumerate(data):
res[i,s]=1
return res
xTrain = vec_seq(trainData)
xTest=vec_seq(testData)
#훈련데이터 -> 벡터로 변환
yTrain = trainLabel.astype('float32')
yTest = testLabel.astype('float32')
신경망 모델 생성
# 신경망 모델생성
model = Sequential()
model.add(Dense(16, activation='relu',input_shape=(10000,)))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss="binary_crossentropy",
optimizer='rmsprop',
metrics=['accuracy'])
xVal=xTrain[:10000]
p_xTrain=xTrain[10000:]
yVal=yTrain[:10000]
p_yTrain=yTrain[10000:]
# 모델학습
history=model.fit(p_xTrain,p_yTrain, epochs=20, batch_size=512,validation_data=(xVal,yVal))
정확도와 손실 증감량 확인
historyDict=history.history
acc=history.history['accuracy']
val_acc=history.history['val_accuracy']
loss=history.history['loss']
val_loss=history.history['val_loss']
%matplotlib notebook
epo = range(1, len(acc)+1)
plt.plot(epo, loss, 'bo', label="Traing loss")
plt.plot(epo, val_loss, 'b', label="Val loss")
plt.xlabel("epoch")
plt.ylabel("Loss")
plt.legend()
plt.show()
# val loss가 떨어지다가 올라가기 전에 트레이닝을 멈추는 것이 좋다
%matplotlib notebook
plt.plot(epo, acc, 'ro', label="Traing accuracy")
plt.plot(epo, val_acc, 'r', label="Val accuracy")
plt.xlabel("epoch")
plt.ylabel("Accuracy")
plt.legend()
plt.show()
#모델평가하기
model.evaluate(xTest,yTest)
>>>[0.7668838533973694, 0.8485999703407288]
출처: 케라스 창시자에게 배우는 딥러닝 p104~p116