일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 시계열 분석
- 텍스트 마이닝
- KONLPY
- 자연어 전처리
- 성능 최적화
- 생성모델
- 출력층
- 순환 신경망
- 완전연결층
- 이미지 분류
- cnn
- 전이학습
- 합성곱 신경망
- 딥러닝
- 클러스터링
- RNN
- 코딩테스트
- COLAB
- 풀링층
- 원-핫 인코딩
- 임베딩
- 합성곱층
- 카운트 벡터
- 과적합
- 입력층
- 프로그래머스
- NLTK
- 망각 게이트
- 양방향 RNN
- 코랩
Archives
- Today
- Total
Colab으로 하루에 하나씩 딥러닝
시계열 분석_5.양방향 RNN 본문
728x90
양방향 RNN(Bidirectional RNN)
- RNN이전 시점의 데이터들을 참고해서 정답을 예측하지만, 실제 문제에서는 과거 시점이 아닌 미래 시점의 데이터에 힌트가 있는 경우도 있음
- 이후 시점의 데이터도 함께 활용하여 출력 값을 예측하고자 하는 것
양방향 RNN 구조
1. 메모리 셀 2개
- 첫 번째 메모리 셀은 이전 시점의 은닉 상태를 전달받아 현재의 은닉 상태를 계산
- 두 번째 메모리 셀은 다음 시점의 은닉 상태를 전달바아 현재의 은닉 상태를 계산
양방향 RNN 실습
### IMDB 데이터셋 활용, 모델 생성 후 훈련
import numpy as np
from tensorflow.keras.preprocessing import sequence
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Embedding, LSTM, Bidirectional
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.datasets import imdb
n_unique_words = 10000
maxlen = 200
batch_size = 128
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=n_unique_words)
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)
y_train = np.array(y_train)
y_test = np.array(y_test)
model = Sequential()
model.add(Embedding(n_unique_words, 128, input_length=maxlen))
model.add(Bidirectional(LSTM(64))) # LSTM에 양방향 RNN을 적용
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=4,
validation_data=[x_test, y_test])
### LSTM 모델 구조 확인
model.summary()
### 모델 평가
loss, acc = model.evaluate(x_train, y_train, batch_size=384, verbose=1)
print('Training accuracy', model.metrics_names, acc)
print('Training accuracy', model.metrics_names, loss)
loss, acc = model.evaluate(x_test, y_test, batch_size=384, verbose=1)
print('Testing accuracy', model.metrics_names, acc)
print('Testing accuracy', model.metrics_names, loss)
상세 설명
- 훈련 데이터셋은 97% 정확도, 테스트 데이터셋은 약 86% 정확도로 나쁘지 않은 결과를 가짐
참고: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)
'딥러닝_개념' 카테고리의 다른 글
성능 최적화_2.드롭아웃을 통한 최적화 (0) | 2023.01.25 |
---|---|
성능 최적화_1.배치 정규화를 통한 최적화 (0) | 2023.01.21 |
시계열 분석_4.GRU (1) | 2023.01.18 |
시계열 분석_3.LSTM (0) | 2023.01.17 |
시계열 분석_2.순환 신경망(RNN)_2)RNN 셀 구현 (0) | 2023.01.16 |