ใช้ RNN (LSTM) เพื่อทำนายเวกเตอร์ไทม์ซีรี่ส์ (Theano)


19

ฉันมีปัญหาง่าย ๆ แต่ฉันไม่สามารถหาเครื่องมือที่เหมาะสมในการแก้ปัญหาได้

ฉันมีลำดับเวกเตอร์บางส่วนที่มีความยาวเท่ากัน ตอนนี้ฉันต้องการในการฝึกอบรม LSTM RNN ตัวอย่างรถไฟของลำดับเหล่านี้แล้วทำให้มันจะทำนายลำดับใหม่ของเวกเตอร์ของความยาวขึ้นอยู่กับหลายรองพื้นเวกเตอร์n

ฉันไม่พบการใช้งานที่ง่ายซึ่งจะทำเช่นนี้ ภาษาพื้นฐานของฉันคือ Python แต่สิ่งใดก็ตามที่ไม่ได้ติดตั้งไว้นานจะเก็บไว้

ผมพยายามที่จะใช้ลาซานญ่าแต่การดำเนินงานของ RNN ยังไม่พร้อมและจะอยู่ในแพคเกจแยกnntools อย่างไรก็ตามฉันลองอันหลัง แต่ไม่สามารถหาวิธีฝึกได้แล้วนำไปทดสอบโดยเวกเตอร์ทดสอบและปล่อยให้มันทำนายใหม่ บล็อกเป็นปัญหาเดียวกัน - ไม่มีเอกสารประกอบสำหรับ LSTM RNN แม้ว่าจะดูเหมือนว่ามีบางคลาสและฟังก์ชันที่สามารถใช้งานได้ (เช่นblocks.bricks.recurrent)

มีการใช้งาน RNN LSTM หลายอย่างใน Theano เช่น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_trainและy_trainเป็นอาร์เรย์ของอาร์เรย์ (ความยาว 12) เช่น[[i for i in range(12)] for j in range(1000)]


1
ทำไมคุณถึงต้องใช้ RNN ถ้าลำดับทั้งหมดของคุณมีความยาวเท่ากัน? ฝึกฝนเวกเตอร์อินพุตแบบคงที่ผ่าน ANN จะง่ายขึ้นและเร็วขึ้น
itdxer

เวกเตอร์มาจาก timeseries ดังนั้นฉันจึงจำเป็นต้องเดา RNN
kotrfa

1
RNN เป็นสิ่งที่ดีสำหรับงานเมื่อคุณไม่รู้ขนาดอินพุตหรือเอาต์พุตเวกเตอร์ ตัวอย่างเช่นคุณต้องการสร้างเครือข่ายซึ่งจะอธิบายเป็นภาษาอังกฤษสิ่งที่คุณเห็นในภาพดังนั้นอินพุตของคุณอาจเป็นภาพนิ่ง แต่เอาต์พุตจะแตกต่างกันไปขึ้นอยู่กับสิ่งที่คุณเห็นในภาพ อีกตัวอย่างหนึ่งเมื่อคุณต้องการได้รับการแปลข้อความมีทั้งอินพุตและเอาต์พุตของคุณไม่เป็นที่รู้จัก
itdxer

ขอบคุณสำหรับการชี้แจง ดังนั้นจึงไม่มีเหตุผลที่จะใช้ RNN ในงานนี้ ตกลง.
kotrfa

2
@ ความคิดเห็นของ itdxer ทำให้เข้าใจผิด แม้ว่าข้อมูลของคุณจะมีความยาวเท่ากันทุกที่การใช้ RNN ก็มีประโยชน์ RNN แนะนำข้อสันนิษฐานของข้อมูลส่วนใหญ่ว่ามันเป็นของธรรมชาติตามลำดับ เช่นการแปลตามแกนเวลานั้นได้รับการจัดการอย่างงดงามโดย RNN แต่ไม่ได้ใช้วิธีการส่งต่อ - พวกเขาต้องการข้อมูลการฝึกอบรมที่มากขึ้นเพื่อรับรู้และมีพารามิเตอร์มากมายที่จะประเมิน มีอีกหลายกรณีที่ ANN จะหยุดทำงานและเบิร์นหากใช้แทน RNN
bayerj

คำตอบ:


10

ในที่สุดผมก็พบวิธีและการบันทึกไว้ในบล็อกของฉันที่นี่

มีการเปรียบเทียบหลายเฟรมเวิร์กจากนั้นก็นำไปใช้งานหนึ่งใน Keras


5

ฉันอยากจะแนะนำต่อไปนี้:

0) Theano นั้นทรงพลังจริงๆ แต่ก็มีบางตัวที่สามารถแพร่กระจายได้ในบางครั้ง

1) ฉันขอแนะนำให้คุณดูความแตกต่าง: https://github.com/breze-no-salt/breze/blob/master/notebooks/recurrent-networks/RNNs%20for%20Piano%20music.ipynbซึ่งง่ายกว่าเล็กน้อย เป็นที่เข้าใจและมีโมดูล LSTM เช่นกัน นอกจากนี้ตัวเลือกที่น่าสนใจคือ autograd โดย Harvards ซึ่งทำหน้าที่สร้างความแตกต่างเชิงสัญลักษณ์อัตโนมัติของฟังก์ชัน numpy https://github.com/HIPS/autograd/blob/master/examples/lstm.pyดังนั้นคุณสามารถเข้าใจได้ว่าเกิดอะไรขึ้น

2) ฉันเป็นแฟนงูหลาม แต่นี่เป็นความชอบส่วนตัวของฉัน คุณได้พิจารณาการใช้ Torch7 เป็นกรอบที่ใช้งานง่ายที่สุดสำหรับเครือข่ายประสาทและยังใช้โดย Google Deepmind และ Facebook AI? คุณสามารถตรวจสอบนี้โพสต์บล็อก intresting มากเกี่ยวกับ RNNs http://karpathy.github.io/2015/05/21/rnn-effectiveness/ นอกจากนี้การดำเนินการ LSTM มีอยู่ใน repo GitHub ของโพสต์ในขณะที่ทางเลือกที่เป็นแพคเกจ RNN https://github.com/Element-Research/rnn


1
ฉันใช้งานของ Karpathy ได้สำเร็จในช่วงสองสามสัปดาห์ที่ผ่านมา แต่น่าเสียดายที่ฉันไม่สามารถปรับแต่งอัลกอริทึมของเขาเพื่อทำนายเวกเตอร์และไม่เรียงลำดับตัวละครได้ เป็นเพราะฉันไม่คุ้นเคยกับ Lua มากนัก ดังนั้นฉันอดทนใช้ Torch7 ยัง แต่ฉันไม่ได้จริงๆพบว่ามันง่ายมาก ขอบคุณ
kotrfa

Sยังไม่มีข้อความยังไม่มีข้อความ

ฉันมีเวกเตอร์ 12 องค์ประกอบจากการวัดทุกวินาที ฉันต้องการฝึกอวนแล้วก็เอามันมาคูณด้วยเวกเตอร์ 5 ตัว (ความยาว 12) แล้วปล่อยให้มันทำนายเวกเตอร์ต่อไปนี้ ไม่มีอะไรเพิ่มเติม ฉันได้อัปเดตคำถามของฉันเมื่อฉันลองใช้ Keras
kotrfa

คุณสามารถใช้ฟีดอย่างง่ายไปข้างหน้าได้แม้ว่าเวกเตอร์ของคุณจะมาจากอนุกรมเวลา ตรวจสอบให้แน่ใจว่าจำนวนของลำดับนั้นคงที่
Yannis Assael

จากบทความไม่กี่ฉันได้อ่านเช่น Karpathy ของฉันเข้าใจว่า LSTM เป็นตัวเลือกที่ดีที่สุดสำหรับลำดับใช่ไหม? ฟีดไปข้างหน้าอย่างง่าย NN มี "คุณสมบัติหน่วยความจำ" หรือไม่?
kotrfa

0

ฉันได้ทดสอบ LSTM ทำนายลำดับเวลาด้วย Theano ฉันพบว่าสำหรับเส้นโค้งที่ราบเรียบมันสามารถทำนายได้อย่างถูกต้อง อย่างไรก็ตามสำหรับโค้งคดเคี้ยวไปมาบางส่วน มันยากที่จะทำนาย บทความโดยละเอียดมีดังนี้: ทำนายเวลาตามลำดับด้วย LSTM

ผลการทำนายสามารถแสดงดังต่อไปนี้:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.