티스토리 뷰

 

 

텐서플로우의 또 다른 기능

 

RNN의 가장 강력한 점은 sequence data를 처리할 수 있다는 것이다. 이전의 예에서 sequence는 크기가 딱 정해져 있었다. 그런데 실전에서 data를 받게 되면 정해져 있지 않을 때가 많다.
예를 들어보자. 번역을 해야하는데 어떤 사람은 20개의 문자열을 어떤사람은 500개의 문자열을 준다. 이렇게 문자열의 개수는 가변하는데, 우리가 편하게 하기 위해서 항상 번역을 할때는 20개의 문자열로 고정시키라고 한다면 사용자들이 굉장히 불편해 할 것이다.
그래서 RNN은 대부분 가변하는 sequence를 입력으로 받아들여야 하는데 어떻게 할 수 있을까?

 

다음과 같이 hello, hi, why와 같이 다른 값에 다른 길이의 문자열을 준다고 해보자. 어떻게 처리해야 할까?
기존의 방법에서는 빈 공간에 padding이라는 특별한 기호를 삽입한다. 그러면서 출력값이 padding값을 없는것으로 생각하며 출력해주길 바라는 마음을 갖는다.
그런데 사실 이렇게 넣는다고 해도 weight이 존재하기 때문에 어떤 값이 나올수밖에 없다. 이렇게 나온 값은 loss함수를 계산할때 오차가 생겨 결과를 좋지 않게 할 수 있다.
그래서 새로운 텐서플로우에서는 문자열을 줄 때, 문자열을 줄 때 문자열(배치)과 함께 문자열 길이 행렬(sequence_length=[5,2,3])를 같이 준다.

 

Dynamic RNN

 
[In]

# 3 batches 'hello', 'eolll', 'lleel'
x_data = np.array([[[...]]], dtype=np.float32)

hidden_size = 2
cell = rnn.BasicLSTMCell(num_units=hidden_size, state_is_tuple=True)
outputs, states = tf.nn.dynamic_rnn(
        cell, x_data, sequence_length=[5,3,4],
        dtype=tf.float32)
sess.run(tf.global_variables_initializer())
print(outputs.eval())
 
[Out]

array([[[-0.17904168, -0.08053244], # 5개 모두 값을 갖는다.
     [-0.01294809, 0.01660814],
     [-0.05754048, -0.1368292],
     [-0.08655578, -0.20553185],
     [0.07297077, -0.21743253]],

    [[0.10272847, 0.06519825],      # 3개만 값을 주고 2개는 0으로 만들어 준다.
     [0.20188759, -0.05027055],
     [0.09514933, -0.16452041],
     [0.        , 0.         ],
     [0.        , 0.         ]],

    [[-0.04893036, -0.14655617],    # 4개의 값을 주고 1개는 0으로 만들어 준다.
     [-0.07947272, -0.20996611],
     [0.06466491, -0.02576563],
     [0.15087658, 0.05166111],
     [0.        , 0.        ]]],
 

값이 없는 부분은 0으로 만들어 줘 loss가 잘 동작되도록 해준다.

'beginner > 파이썬 딥러닝 기초' 카테고리의 다른 글

Deep Deep Network AWS 에서 GPU와 돌려보기  (0) 2019.05.18
RNN with Time Series Data  (0) 2019.05.18
Stacked RNN + Softmax Layer  (0) 2019.05.18
Long Sequence RNN  (0) 2019.05.16
RNN-Hi Hello  (0) 2019.05.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함