문서 분류 인공지능 만들기

3) 문서 분류 인공지능 - 모델 만들기,실행,저장

잡동사니123 2023. 2. 6. 23:58

모델 처리 전체 과정 요약

  • 모델 설정 -> 모델 컴파일 -> 모델 실행 -> 모델 저장
  • 전체 코드 
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]))

모델 저장

  • 원하는 경로와 이름을 넣어 모델 저장
# 모델 저장
model.save('./sort_model.h5')

실행 결과

  • 0.68정도의 정확도가 나옴