자연어 학습

박용민·2022년 3월 23일
0

쉬운 딥러닝

목록 보기
6/8
post-thumbnail

스팸문자 검출

자연어를 숫자로 변환

"I ate the cake"

순서atecakeIthe
알파벳0123
단어 순서2031

원 핫 벡터(one hot vector)임베딩

  • 모든 내용물이 0으로 채워진 백터를 하나 만든다.
  • 벡터의 n번쨰 숫자만 1로 바꾼다.
  1. ex) "I ate an apple cake"
  2. (6,3,1,2,5)
  3. (0,0,0,0,0,0,1,0,0,0),
    (0,0,0,1,0,0,0,0,0,0),
    (0,1,0,0,0,0,1,0,0,0),
    (0,0,1,0,0,0,1,0,0,0),
    (0,0,0,0,0,1,0,0,0,0)

신경망 구조

층수종류크기활성화 함수
1층Embedding8983,128-
-Global Average Pooling 1D--
2층FNN32ReLu
-Dropoutrate=0.1-
3층FNN1sigmoid

임베딩

  • 왼쪽에 기재된 8983은 우너 핫 벡터를 만들기 위한 단어의 총 개수를 의미
  • 128은 입베딩 레이어가 출력하는 데이터의 사이즈를 의미한다.

Global Pooling

  • 데이터의 사이즈뿐 아니라 차원까지도 축소하는 풀링 기법이다.
  • Global Pooling 1D을 2차원 데이터를 1차원으로 줄이는 연산

딥러닝 모델 코딩

"""
Author : Byunghyun Ban
"""
from tensorflow import keras
import data_reader

# 몇 에포크 만큼 학습을 시킬 것인지 결정합니다.
EPOCHS = 50  # 예제 기본값은 50입니다.

# 데이터를 읽어옵니다.
dr = data_reader.DataReader()

# 인공신경망을 제작합니다.
model = keras.Sequential([
    keras.layers.Embedding(8983, 128),
    keras.layers.GlobalAveragePooling1D(),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dropout(0.1),
    keras.layers.Dense(1, activation='sigmoid')
])

# 인공신경망을 컴파일합니다.
model.compile(optimizer="adam", metrics=['accuracy'],
              loss="binary_crossentropy")

# 인공신경망을 학습시킵니다.
print("\n\n************ TRAINING START ************ ")
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS,
                    validation_data=(dr.test_X, dr.test_Y),
                    callbacks=[early_stop])

# 학습 결과를 그래프로 출력합니다.
data_reader.draw_graph(history)

0개의 댓글

관련 채용 정보