머신러닝

6-23 Keras LSTM에 의한 Airline Market RNN 오픈소스 튜토리얼(1)

coding art 2019. 9. 4. 16:33
728x90



__________________________________________________________________________________________________________________________Commercial

파이선 코딩을 배우는 초보자도 머신 러닝에 한번 도전해 보자. 머신 러닝을 배우려해도 어렵게만 느껴지는

머신 러닝을 배우려는 초보자들이 가지게 될 의문점들을 쪽집게로  찾아내어  실제 내용과 결과를 확인해

볼 수 있도록  완전히 뒷문으로 들어가 시작하는 머신 러닝! 우선 아래 url 을 방문하여 url 로 구성된

본 서의 목차 파일을 무료로 다운로드 받아 펼쳐서 살펴보시기 바랍니다.

파이선 코딩 초보자를 위한 톈서플로우∙OpenCV 머신러닝 머리말과 url 목차 파일 다운로드
https://steemit.com/kr/@codingart/pryx1-opencv


450페이지 19900원 교모문고 퍼플에서 도서주문판매로만 판매중입니다.

noname03.png

_____________________________________________________________________________________________________

TensorFlow에서 RNN을 사용하다가 Keras 로 넘어오는 경우에 상당한 장해를 느꼈다. 거의 같을 것이라 생각했었지만 오픈소스로 알려진 블로그 글들을 참고해 보아도 Keras 시작 자체가 쉽지 않았다. 따라서 TensoFlow에서 기초적인 RNN 사용법을 습득했다면 Keras를 사용해서도 쉽게 사용할 수 있도록 해보자.

 

헤더 영역에 keras.models를 불러들이는 import sequential 선언이 없었다면 model = keras.models.Sequential() 로 처리하지만 반대로 선언이 되어 있다면 코드 중에서 간단하게 model = Sequential()을 불러 쓸 수 있다. 즉 헤더 영역에서 어떻게 sequentialimport 했는가에 따라 다음과 같은 용법도 있을 수 있다.

model = keras.models.Sequential()

 

sequential() 선언 이후에 model.add{∙∙∙} 에 의해 Keras LSTM 명령을 사용하게 되는데 TensorFlow에서 직접 RNN 코드 작성과 정확한 대응 관계를 파악한다면 Keras RNN 사용에 별 문제가 없으리라 본다.

 

우선 문자 수준의 RNN 머신 러닝을 위해 TensorFlow를 사용할 경우 아래 그림에서처럼 입력 데이터 체계를 간단히 알아보자.

 

“hihello” 와 같이 여섯 개의 문자들을 한 묶음으로 처리 할 때에 6개의 Cell 이 연동되는데 이 6sequence_length 로 두자. 여섯 개의 문자 각각은 one hot encoding 방식을 사용하면 “0”“1”중에서 “1” 하나와 “0” 4개를 사용하여 합계 5 비트형 데이터로 표현할 수 있다. 이와 같이 입력 데이터의 크기를 설정해 주어야 하는 한편 LSTM Cell은 일종의 hiden layer로서 출력의 개수를 임의로 설정해 주어야 한다.



위와 같이 문자를 one hot code 로 엔코딩하여 처리하는 경우에는 각각의 RNN Cell 의 입력 데이터 와 출력 데이터의 크기가 동일하게 설정될 수밖에 없다. 하지만 그 밖의 많은 문제에서는 입력 데이터와 출력 데이터가 굳이 동일해야 할 이유는 없다. 입력 데이터 크기야 정해지겠지만 출력 데이터 크기는 사용자가 임의로 설정하는 것이다.

 

“helo” 라는 문자를 RNN 처리하기 위한 아키텍처를 관찰해 보자. helo의 각 철자별로 4비트로 on hot code 처리한 입력 데이터가 RNN에 입력될 수 있다. 즉 입력 데이터의 크기를 4로 설정할 수 있다. 반면에 A로 표시된 hidden layer Cell 은 입력 데이터 크기는 4 이지만 출력 크기에 관해서는 아무런 제한이 없으며 1 이상 의 정수 값으로 사용자가 임의로 설정이 가능한 것이다.



하지만 다음에 입력하게 될 문자를 학습하여 예측하기 위한 RNN에서는 연 이어 입력될 문자 데이터를 입력 데이터와 동일한 크기로 설정하여 바로 앞 Cell 의 출력에서 학습을 시켜야 한다. 위 그림의 오른 쪽을 참조하자.     아래 그림의 코드를 참조해 보면 출력 데이터의 크기 설정은 hidden_size 값 설정에 해당한다.


한편 Keras 라이브러리 모듈을 사용하여 RNN 코드를 작성할 경우에도 마찬가지로 필요한 파라메터를 지정해야 한다. 물론 내용적으로 동일하긴 하지만 실제로 Keras의한 RNN 오픈 소스에서 항상 사용하는 LSTM 루틴의 파라메터 중에서 units를 설정해야 하는데 그 정확한 설명이 부재한 상황이다. RNN에 관해서 웬만큼 알고 있음에도 불구하고도 이 부분 설정을 이해함에 무려 1달 정도의 기간이 걸렸다는 사실을 지적해 두고자 한다. 아무리 Keras 가 뛰어난 라이브러리일지라도 그 사용법을 정확하게 모르면 아무런 소용이 없다고 봐야 한다. Document를 보드라도 앞서 설명했던 간단한 내용을 이해하기 힘들게 되어 있는데 앞서의 설명에 사용되었던 입력 문자 예측 문제를 대상으로 설명하지 않으면 이해하기 어려운 분이다.

 

아래의 사례는 airline market RNN 예측을 위한 오픈 소스의 사례이다.