1. 파이토치란 무엇일까? 출처 : 파이토치 첫걸음 - 최건호 파이토치는 2017년 초에 공개된 딥러닝 프레임워크로 개발자들과 연구자들이 쉽게 GPU를 활용하여 인공 신경망 모델을 만들고 학습시킬 수 있게 도와준다. 파이토치의 전신이라고 할 수 있는 토치(torch)는 루아 프로그래밍 언어로 되어 있었지만, 파이토치는 파이썬으로 작성되어 파이썬의 언어 특징을 많이 가지고 있다. 파이토치는 페이스북의 인공지능 연구팀 멤버들이 주로 관리하며, 독자적으로 운영되는 파이토치 포럼은 사람들이 질문을 올리면 프레임워크 개발자를 비롯한 많은 사람이 답을 해주는 등 활발히 교류가 일어나고 있다. 2. 다른 프레임 워크와의 비교 출처 : 파이토치 첫걸음 - 최건호 파이토치의 장점을 설명하기 위해 먼저 파이썬에서 많이 쓰..
powered bt AWS 아마존 웹서비스를 이용할 수 있는 지원을 받는 방법 (광고 아님;;) Deep Network의 특징 1. Takes a long time for training - Many forward/backward propagation and weight updates - Many metrics multiplications 2. Very quick for testing and use in practice - One simple forward propagation Takes a long time for training을 해결하기 위한 방법 중 하나로 GPU를 사용하는 것이다. GPU는 Metrics 계산을 병렬적으로 아주 빠르게 처리할 수 있다. 텐서플로우 같은 경우 binary를 배포할때..
RNN을 이용하여 Stock Marcket과 같은 time series를 예측하는 방법에 대해 이야기 해보겠다.¶ time series data란 무엇일까? 어떤 시간에 따라 변화하는 값을 의미한다. x축은 시간 y축은 value가 될 것이다. 대표적인 예로 다음과 같은 주식시간의 데이터를 들 수 있겠다. 오픈때 가격, 최대가, 최저가, 판매량, 닫힐때 가격인데, 이것이 매일 기록되니 time series data라 할 수 있다. RNN을 가지고 어떻게 분석할까? 우리가 7일치의 데이터를 가지고 있다고 해보자. 그러면 이 데이터들을 쭉 배열하고 8일째의 가격을 예측해 보는 것이다. 이런 문제를 many to one이라고 한다. 이런 형태의 예측은 7일의 데이터만 가지고 예측하는 것보다 이전의 데이터들을 ..
텐서플로우의 또 다른 기능¶ RNN의 가장 강력한 점은 sequence data를 처리할 수 있다는 것이다. 이전의 예에서 sequence는 크기가 딱 정해져 있었다. 그런데 실전에서 data를 받게 되면 정해져 있지 않을 때가 많다. 예를 들어보자. 번역을 해야하는데 어떤 사람은 20개의 문자열을 어떤사람은 500개의 문자열을 준다. 이렇게 문자열의 개수는 가변하는데, 우리가 편하게 하기 위해서 항상 번역을 할때는 20개의 문자열로 고정시키라고 한다면 사용자들이 굉장히 불편해 할 것이다. 그래서 RNN은 대부분 가변하는 sequence를 입력으로 받아들여야 하는데 어떻게 할 수 있을까? 다음과 같이 hello, hi, why와 같이 다른 값에 다른 길이의 문자열을 준다고 해보자. 어떻게 처리해야 할까?..
Long Sequence RNN 지난번에 긴 문장을 RNN을 이용하여 자동화 했었는데 좋은 결과가 나오지 않았다. 그 이유는 복잡하고 많은 데이터를 다루기에는 RNN 셀이 너무 작았기 때문이다. 그래서 기본적으로 딥러닝의 핵심적인 아이디어는 wide하고 deep하게 가야 한다는 것이다. 우리는 RNN cell이 한 층밖에 없었는데, 이것을 더 쌓는 방법은 없을까? Stacked RNN¶ X = tf.placeholder(tf.int32, [None, seq_length]) Y = tf.placeholder(tf.int32, [None, seq_length]) # One-hot encoding X_one_hot = tf.one_hot(X, num_classes) print(X_one_hot) # check..
전 시간에 hihello라는 데이터를 RNN으로 학습시켰다. 이것을 학습시킬때 숫자로 고치는 과정이라던지 원핫인코딩이라던지 손으로 일일히 했다. 하지만 이게 쉬운 단어가 아니라 책과 같은 많은 양의 문자를 다뤄야 할때는 어떻게 해야 할까? Better data creation¶ sample = "if you want you" idx2char = list(set(sample)) # index -> char , set으로 유니크한 문자열이 나오면 list로 만들어버림 char2idx = {c: i for i, c in enumerate(idx2char)} # char -> idx sample_idx = [char2idx[c] for c in sample] # char to index x_data = [sam..
RNN-Hi Hello¶ RNN에게 hi hello라는 단어를 훈련시켜 보겠다. 한 문자를 주면 그 다음 문자를 예측하도록 할 수 있도록 학습 시켜보겠다. 간단해 보이지만 어떤 h를 훈련시켰을 때는 i가 나와야 하고 같은 h 이지만 어떤 h는 e가 나온다는 사실이다. 그래서 일반적인 forward net으로는 쉽지 않다. 이전의 문자를 알아야 값을 잘 출력 하도록 해주는 RNN이 효과적이다. rnn 자체가 어려운건 아닌데 rnn에 넣을 문자들을 가공하는 것이 복잡하게 느껴질 수 있다. 텍스트를 유니크한 문자만 구하고, 각 문자들에 숫자를 매긴다. 이렇게 문자를 숫자와 대응시키고 나면 원핫인코딩을 이용해 표현할 수 있다. 입력의 디멘션은 5이다. sequence 길이는 6이다. 출력(hidden)의 디멘션..
RNN in TensorFlow¶ 1단계¶ rnn을 구현 할 때에는 2가지를 고려해야 한다. 이번 출력이 다음번 cell로 연결되기 때문에 어떤 형태의 cell을 만들 것인가 고민해야 한다. 대표적인 것들로 rnn, lstm, gru 같은 것들이 있다. 그리고 cell을 만들때 가장 중요한 점은 cell에서 나가는 아웃풋(출력,ht)의 크기가 얼마일지 결정해 주는 것이다. 두번째로는 셀을 만든 것을 실제로 구동시켜서 입력을 주고 출력값을 뽑아내야 하는데 드라이버 or 또는 다른 형태의 함수(레퍼)라고 볼수도 있는데 보통 tf.nn.dynamic_rnn을 사용한다. 우리가 만든 셀과 입력 데이터를 넣어주면 output 출력과 states 출력 값을 준다. 이렇게 나눈 이유는 셀을 생성하는 부분과 구동시켜주..