import pickle
from keras.layers import Dense, LSTM, Embedding, Dropout
from keras.models import Sequential
# 데이터 입력
with open('C:/pickle/data.pickle', 'rb') as f:
x_train = pickle.load(f)
x_test = pickle.load(f)
y_train = pickle.load(f)
y_test = pickle.load(f)
# 모델 설정
model = Sequential()
model.add(Embedding(35, 100))
model.add(Dropout(0.5))
model.add(LSTM(100, activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(11, activation='softmax'))
# 모델 컴파일
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 모델 실행
history = model.fit(x_train, y_train, batch_size=100, epochs=15, validation_data=(x_test, y_test))
# 테스트 정확도 출력
print('\n Test Accuracy: %.4f' % (model.evaluate(x_test, y_test)[1]))
# 모델 저장
model.save('./sort_model.h5')
모델 설정
Sequential : 순차적(연속적) 모델을 만들기 위해 설정
LSTM : rnn을 보완함, 텍스트에 주로 사용됨
Dense : 입력과 출력을 연결해주는 층, 위 모델은 다중 클래스를 분류할 예정이므로 다중 클래스 분류에 주로 사용되는 softmax를 활성화 사용
# 모델 설정
model = Sequential()
model.add(Embedding(35, 128))
model.add(LSTM(128, activation='tanh'))
model.add(Dense(11, activation='softmax'))
모델 컴파일
loss : 손실 함수를 넣는 곳으로 categorical_crossentropy를 넣음, 다중 분류 손실 함수이고 여러 유형의 문서를 분류해야하므로 이 함수를 선택
optimizer : 최적화 알고리즘으로 adam을 넣음, 제일 보편적으로 사용하여서 선택
# 모델 컴파일
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
모델 실행
batch_size : 1번 학습할때마다 데이터 전체 크기중 얼마만큼 쪼개서 학습시킬지 결정
epoch : 학습을 몇번 해야하는지 지정, 모델을 실행시켰을때 15번 이상 학습시켜도 만족할만한 정확도가 안나오고 오히려 떨어져서 15번으로 설정
최종적으로 테스트 정확도를 출력하도록 설정
# 모델 실행
history = model.fit(x_train, y_train, batch_size=100, epochs=15, validation_data=(x_test, y_test))
# 테스트 정확도 출력
print('\n Test Accuracy: %.4f' % (model.evaluate(x_test, y_test)[1]))