시계열 벡터 예측을 위해 RNN (LSTM) 사용 (Theano)


19

나는 매우 간단한 문제가 있지만 그것을 해결할 수있는 올바른 도구를 찾을 수 없습니다.

길이가 같은 벡터 시퀀스가 ​​있습니다. 이제이 시퀀스의 기차 샘플에 대해 LSTM RNN을 학습 한 다음 여러 프라이밍 벡터를 기반으로 길이 의 새로운 벡터 시퀀스를 예측하려고합니다 .

이 작업을 수행하는 간단한 구현을 찾을 수 없습니다. 내 기본 언어는 Python이지만 며칠 동안 설치되지 않은 것은 유지됩니다.

Lasagne 을 사용하려고 시도했지만 RNN 구현이 아직 준비되지 않았으며 별도의 패키지 nntools에 있습니다. 어쨌든, 나는 후자를 시도했지만 그것을 훈련시키는 방법을 알아낼 수 없었고, 테스트 벡터로 프라이밍하고 새로운 것을 예측하게했습니다. 블록도 같은 문제입니다. LSTM RNN에 대한 문서는 없지만, 작동 할 수있는 클래스와 함수가있는 것 같습니다 (예 :) blocks.bricks.recurrent.

이 Theano 같은에서 RNN LSTM의 여러 구현되어 GroundHog, theano-rnn, theano_lstm몇 가지 서류 및 코드 왔지만 튜토리얼 사람들의 비 또는 내가 원하는 일을하는 방법을 안내합니다.

내가 찾은 유용한 솔루션은 Pybrain을 사용하는 것입니다. 그러나 불행하게도 Theano (주로 GPU 계산)의 기능이 없으며 고아입니다 (새로운 기능 및 지원 없음).

누구든지 내가 원하는 것을 어디서 찾을 수 있는지 알고 있습니까? 벡터 시퀀스를 예측하기 위해 RNN LSTM을 사용하여 쉽게 작업 할 수 있습니까?

편집하다:

나는 Keras를 다음과 같이 시도했다.

from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM

model = Sequential()
model.add(Embedding(12, 256))
model.regularizers = []
model(LSTM(256, 128, activation='sigmoid', 
               inner_activation='hard_sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(128, 12))
model.add(Activation('sigmoid'))
model.compile(loss='mean_squared_error', optimizer='rmsprop')

그러나 나는 그것을 맞추려고 할 때이 오류가 발생합니다. model.fit(X_train, y_train, batch_size=16, nb_epoch=10)

IndexError: index 800 is out of bounds for axis 1 with size 12

동안 X_trainy_train, 예를 들어, (길이 12) 배열의 배열은[[i for i in range(12)] for j in range(1000)]


1
모든 시퀀스의 길이가 같은 경우 왜 RNN이 필요합니까? ANN을 통해 정적 입력 벡터를 학습하는 것이 더 쉽고 빠릅니다.
itdxer 2016 년

벡터는 시계열에서 나옵니다. RNN이 필요한 것 같아요?
kotrfa

1
RNN은 입력 또는 출력 벡터 크기를 모르는 작업에 적합합니다. 예를 들어 그림에서 볼 수있는 것을 영어로 설명하는 네트워크를 구축하면 입력이 정적 이미지가 될 수 있지만 그림에서 볼 수있는 내용에 따라 출력이 달라집니다. 텍스트 번역을 원할 때의 또 다른 예는 입력과 출력을 모두 알 수 없습니다.
itdxer 2016 년

설명해 주셔서 감사합니다. 따라서이 작업에서 RNN을 사용할 이유가 없습니다. 확인.
kotrfa

2
@itdxer의 의견이 잘못되었습니다. 데이터의 길이가 모든 곳에서 동일하더라도 RNN을 사용하는 것이 좋습니다. RNN은 주로 데이터가 순차적이라는 데이터 가정을 소개합니다. 예를 들어 시간 축을 따른 변환은 피드 포워드 방법이 아니라 RNN에 의해 ​​정상적으로 처리됩니다.이를 실현하기 위해서는 훨씬 더 많은 훈련 데이터가 필요하며 추정 할 더 많은 매개 변수가 있습니다. RNN 대신 ANN을 사용하는 경우 ANN이 충돌하고 타는 경우가 더 많습니다.
bayerj

답변:


10

나는 마침내 방법을 찾아 내 블로그 에 문서화했습니다 .

Keras에는 여러 프레임 워크와 하나의 구현이 비교되어 있습니다.


5

나는 다음을 제안 할 것이다 :

0) Theano는 정말 강력하지만 그렇습니다. 대구는 때때로 시작하기가 어려울 수 있습니다.

1) 나는 breze 체크 아웃을 제안 https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynb 약간 더 쉽다 LSTM 모듈도 이해해야합니다. 또한, Hartreds에 의해 자동 선택이 선택됩니다. Harvards는 numpy 함수 https://github.com/HIPS/autograd/blob/master/examples/lstm.py 의 자동 기호 구분을 수행 하므로 진행 상황을 쉽게 이해할 수 있습니다.

2) 저는 파이썬 팬이지만 개인적으로 선호합니다. Torch7을 사용하는 것이 신경망을위한 가장 사용자 친화적 인 프레임 워크이며 Google Deepmind 및 Facebook AI에서도 사용되는 것으로 생각하십니까? RNNs http://karpathy.github.io/2015/05/21/rnn-effectiveness/ 에 대한 매우 흥미로운 블로그 게시물을 확인할 수 있습니다 . 또한 LSTM 구현은 게시물의 github 저장소에서 사용할 수 있으며 대안은 rnn 패키지 https://github.com/Element-Research/rnn 입니다.


1
지난 몇 주 동안 Karpathy의 작업을 성공적으로 사용했습니다. 불행히도, 문자 시퀀스가 ​​아닌 벡터를 예측하기 위해 알고리즘을 조정할 수 없습니다. Lua에 익숙하지 않기 때문이기도합니다. 따라서 수동적으로 Torch7을 사용했지만 실제로는 매우 친숙하지 않습니다. 감사합니다
kotrfa 2016 년

에스

매 초마다 12 요소로 구성된 벡터가 있습니다. 나는 그물을 훈련시키고 나서, 예를 들어 길이가 12 인 5 개의 벡터만큼 프라이밍하고 다음 벡터를 예측하게한다. 더 이상 없습니다. Keras를 사용하여 시도하여 내 질문을 업데이트했습니다.
kotrfa

벡터가 시계열에서 나온 경우에도 간단한 피드 포워드를 사용할 수도 있습니다. 시퀀스 수가 일정한지 확인하십시오.
Yannis Assael

Karpathy와 같이 내가 읽은 몇 가지 기사에서 LSTM이 시퀀스에 가장 적합한 선택이라는 것을 알고 있습니다. 단순 피드 포워드 NN에 "메모리 기능"이 있습니까?
kotrfa

0

Theano로 시간 순서를 예측하는 LSTM을 테스트했습니다. 부드러운 곡선의 경우 올바르게 예측할 수 있다는 것을 알았습니다. 그러나 일부 지그재그 곡선의 경우. 예측하기 어렵다. 자세한 내용은 다음과 같습니다. LSTM을 사용하여 시간 시퀀스 예측

예측 결과는 다음과 같이 표시 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.