민팽로그

10월 1일 언어 지능 실습 본문

머신러닝&딥러닝

10월 1일 언어 지능 실습

민팽 2021. 10. 2. 19:08
실습 내용

- 모델의 성능을 높이기 위해 adam 함수의 하이퍼파라미터 변경하기

- 임의의 input을 모델에 넣어 감정 분석 결과 확인하기

 

핵심 코드

1. accuracy 82% 이상으로 높이기(지난시간 모델 부분 수정)

# 3-3
from sklearn.model_selection import train_test_split
from tensorflow import keras
from keras.preprocessing import sequence
from keras import layers, models, optimizers
import numpy as np

# 3-1: sklearn를 사용하여 train과 test 분리
x_train,  x_test , y_train , y_test  = train_test_split(train,labels,test_size = 0.2)

#자료형 변환
x_train = np.array(x_train)
x_test = np.array(x_test)
y_train = np.array(y_train)
y_test = np.array(y_test)

max_features = 20000
maxlen = 100
 
hap = 0

x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)

x = layers.Input((maxlen,))
h = layers.Embedding(max_features, 128)(x) #
h = layers.SimpleRNN(128)(h) #
y = layers.Dense(1, activation='sigmoid')(h)
          
model = models.Model(x,y)
model.compile(loss='binary_crossentropy',
              optimizer=keras.optimizers.Adam(learning_rate=0.00015, beta_1=0.9, beta_2= 0.999, epsilon=1e-7, decay=0), 
              metrics=['accuracy'])

batch_size = 20
epochs = 4

model.fit(x_train, y_train, 
          batch_size=batch_size, 
          epochs=epochs,
          validation_data=(x_test, y_test))

- learning_rate : 학습률 조정

- beta_1 : momentum 관련 파라미터

- beta_2 : adagrad 관련 파라미터

- epsilon : Adagrad 분모 가 0 되는 것을 방지하기 위한 파라메터

- decay :  Learning rate 1 epoch 진행 마다 Decay 비율만큼 감소

ex)

Learning rate = 0.1 , decay 0.01 

1 Epoch LR  = 0.1

2 Epoch LR  = 0.09

 

-> 실습 결과 accuracy : 0.9542

Epoch 1/4 800/800 [==============================] - 50s 61ms/step - loss: 0.6140 - accuracy: 0.6482 - val_loss: 0.5159 - val_accuracy: 0.7567

Epoch 2/4 800/800 [==============================] - 49s 61ms/step - loss: 0.3824 - accuracy: 0.8304 - val_loss: 0.4545 - val_accuracy: 0.7870

Epoch 3/4 800/800 [==============================] - 48s 60ms/step - loss: 0.2549 - accuracy: 0.9001 - val_loss: 0.4757 - val_accuracy: 0.7780

Epoch 4/4 800/800 [==============================] - 48s 60ms/step - loss: 0.1419 - accuracy: 0.9542 - val_loss: 0.5496 - val_accuracy: 0.7812

 

2. 예측 결과 확인하기

# 3-4
input_text = "재미없어 짜증나"
input_list = komoran.morphs(input_text)

#입력 길이 조정
for i in range(len(input_list)):
    word = input_list[i]
    input_list[i] = voca_dict[word]

copy = input
for i in range(100 - len(input_list)):
    input_list.insert(0, 0)

input_list = np.array(input_list)

inputs = np.zeros((2,100))
inputs[0] = input_list

#예측
result = model.predict(inputs)

print("입력한 텍스트:", input_text, "\n")
if result[0] > 0.6:
    print("결과: 긍정문입니다.\n")
    print("sigmoid 결과:", result[0][0])
else:
    print("결과: 부정문입니다.\n")
    print("sigmoid 결과:", result[0][0])

 

->텍스트 감정 예측 결과

 

 

 

 

 

코랩 실습 파일

10월1일.ipynb
0.02MB

'머신러닝&딥러닝' 카테고리의 다른 글

성능 향상을 위한 데이터 스케일링  (0) 2021.10.31
10월 6일 언어 지능 실습  (0) 2021.10.06
optimizer  (0) 2021.10.01
9월 30일 언어 지능 실습  (0) 2021.10.01
9월 29일 언어 지능 실습  (0) 2021.09.29
Comments