일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 합성곱 신경망
- 양방향 RNN
- 전이학습
- 생성모델
- 딥러닝
- KONLPY
- 과적합
- 완전연결층
- 입력층
- 텍스트 마이닝
- 자연어 전처리
- 프로그래머스
- 망각 게이트
- 출력층
- RNN
- 성능 최적화
- cnn
- NLTK
- 합성곱층
- COLAB
- 카운트 벡터
- 이미지 분류
- 원-핫 인코딩
- 풀링층
- 코딩테스트
- 코랩
- 클러스터링
- 시계열 분석
- 순환 신경망
- 임베딩
Archives
- Today
- Total
Colab으로 하루에 하나씩 딥러닝
시계열 분석_4.GRU 본문
728x90
GRU(Gated Recurrent Unit)
- LSTM의 장점을 유지하면서 게이트 구조를 단순하게 만든 순환 신경망
- LSTM에서 사용하는 망각 게이트와 입력 게이트를 하나로 합친 것, 별도의 업데이트 게이트로 구성됨
GRU 구조
1. 망각 게이트(Reset gate)
- 과거 정보를 적당히 초기화시키려는 목적으로 시그모이드 함수를 출력으로 이용하여 (0,1) 값을 이전 은닉층에 곱함
2. 업데이트 게이트(Update gate)
- 과거와 현재 정보의 최신화 비율을 결정하는 역할
- 시그모이드로 출력한 결과는 현시점의 정보량으로 결정하고 1에서 뺀 값은 직전 시점의 은닉층 정보와 곱함
3. 후보군(Candidate)
- 현시점의 정보에 대한 후보군을 계산
- 과거 은닉층의 정보를 그대로 이용하지 않고 망각 게이트의 결과를 이용하여 후보군을 계산
GRU 실습
2023.01.16 - [딥러닝_개념] - 시계열 분석_2.순환 신경망(RNN)_2)RNN 셀 구현
시계열 분석_2.순환 신경망(RNN)_2)RNN 셀 구현
### 라이브러리 호출 import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = "2" import tensorflow as tf import numpy as np from tensorflow import keras from tensorflow.keras import layers from tensorflow.keras.models import Sequential from tensorflow.keras.l
elleik.tistory.com
이전 게시물의 기반으로 실습 진행하기 때문에 이전글 확인 후 아래의 실습을 보시는 걸 추천드립니다.
이전 게시물과 동일하게 라이브러리 호출, 값 초기화, 데이터셋 준비를 실행합니다.
### 네트워크 생성
class GRU_Build(tf.keras.Model):
def __init__(self, units):
super(GRU_Build, self).__init__()
self.state0 = [tf.zeros([batch_size, units])]
self.state1 = [tf.zeros([batch_size, units])]
self.embedding = tf.keras.layers.Embedding(total_words, embedding_len, input_length=max_review_len)
self.RNNCell0 = tf.keras.layers.GRUCell(units, dropout=0.5)
self.RNNCell1 = tf.keras.layers.GRUCell(units, dropout=0.5)
self.outlayer = tf.keras.layers.Dense(1)
def call(self, inputs, training=None):
x = inputs
x = self.embedding(x)
state0 = self.state0
state1 = self.state1
for word in tf.unstack(x, axis=1):
out0, state0 = self.RNNCell0(word, state0, training)
out1, state1 = self.RNNCell1(out0, state1, training)
x = self.outlayer(out1)
prob = tf.sigmoid(x)
return prob
### 모델 훈련
import time
units = 64
epochs = 4
t0 = time.time()
model = GRU_Build(units)
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.losses.BinaryCrossentropy(),
metrics=['accuracy'],
experimental_run_tf_function=False)
model.fit(train_data, epochs=epochs, validation_data=test_data, validation_freq=2)
### 모델 평가
print("훈련 데이터셋 평가 >>> ")
(loss, accuracy) = model.evaluate(train_data, verbose=0)
print("loss={:.4f}, accuracy={:.4f}%".format(loss,accuracy * 100))
print("테스트 데이터셋 평가 >>> ")
(loss, accuracy) = model.evaluate(test_data, verbose=0)
print("loss={:.4f}, accuracy={:.4f}%".format(loss,accuracy * 100))
t1 = time.time()
print('시간: ', t1-t0)
상세 설명
- LSTM의 테스트 데이터셋 평가 정확도인 83.4575%에서 미세하게 정확도가 낮지만 전반적인 정확도는 나쁘지 않음
참고: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)
'딥러닝_개념' 카테고리의 다른 글
성능 최적화_1.배치 정규화를 통한 최적화 (0) | 2023.01.21 |
---|---|
시계열 분석_5.양방향 RNN (0) | 2023.01.19 |
시계열 분석_3.LSTM (0) | 2023.01.17 |
시계열 분석_2.순환 신경망(RNN)_2)RNN 셀 구현 (0) | 2023.01.16 |
시계열 분석_2.순환 신경망(RNN)_1)구조와 모델 (0) | 2023.01.13 |