[Farm] 5주차_텍스트

타마타마·2025년 11월 9일

FramSystem

목록 보기
3/4

1. 순차 데이터 + 순환 신경망

순차 데이터란?

  • 텍스트, 시계열 데이터, 일정시간 간격으로 기록된 데이터 처럼 순서에 의미가 있는 데이터

이미지 한장을 분류하는 것은 순서가 상관 없다. 모델을 만들 때 골고루 있는 더 좋을 때가 있다.
하지만 그렇지 않은 경우는 순서를 유지해야한다.)

  • 피드 포워드 신경망 :: 입력 데이터 흐름이 앞쪽으로 전달되느 신경망
  • 토큰 :: 분리된 단어
    - 샘플 하나에 토큰 여러개 존재
    • 1개의 토큰이 하나의 타임스텝에 해당한다.
    • 0 : 패딩, 1: 문장의 시작, 2: 어휘사전에 없는 토큰

순환 신경망

  • 일반적인 완전 연결 신경망과 거의 비슷하지만, 이전 데이터를 순환하도록 하는 고리를 붙인다.
  • 이전 샘플에 대한 기억을 가지고 있다.

순환 신경망으로 IMDB 리뷰 분류

IMDB 리뷰 데이터셋


from tensorflow.keras.datasets import imdb

(train_input, train_target), (test_input, test_target) = imdb.load_data(
    num_words=200)

순환 신경망 만들기

순환 신경

rmsprop = keras.optimizers.RMSprop(learning_rate=1e-4)
model.compile(optimizer=rmsprop, loss='binary_crossentropy',
              metrics=['accuracy'])

checkpoint_cb = keras.callbacks.ModelCheckpoint('best-simplernn-model.keras',
                                                save_best_only=True)
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3,
                                                  restore_best_weights=True)

history = model.fit(train_oh, train_target, epochs=100, batch_size=64,
                    validation_data=(val_oh, val_target),
                    callbacks=[checkpoint_cb, early_stopping_cb])



plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()

단어 임베딩 사용하기


model2 = keras.Sequential()

model2.add(keras.layers.Embedding(200, 16, input_shape=(100,)))
model2.add(keras.layers.SimpleRNN(8))
model2.add(keras.layers.Dense(1, activation='sigmoid'))

model2.summary()

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()

LSTM과 GRU 셀

  • LSTM : 장단기 메모리
  • GRU : 게이트 순환 유닛

0개의 댓글