วิธีการตั้งค่าความยาวของเลเยอร์อินพุตใน lstm

ฉันกำลังสร้างโมเดล LSTM เพื่อจัดประเภทข้อมูลบทวิจารณ์บางส่วนโดยใช้ Keras เอาต์พุตเป็นเพียง 1 หรือ 0

ฉันเพิ่มเลเยอร์การฝังคำก่อนที่จะป้อนข้อมูลข้อความลงในเลเยอร์ lstm ส่วนหนึ่งของรหัสของฉันแสดงอยู่ด้านล่าง นี่คือ max_feature คือขนาดคำศัพท์ ขนาดเวกเตอร์ของ Word คือ 2 ขนาดของแต่ละเอกสารคือ maxlen เอกสารทั้งหมดได้รับการเสริมความยาวเท่ากันแล้ว

อย่างไรก็ตาม ฉันมักจะสับสนกับความยาวของเลเยอร์ LSTM เสมอ นั่นควรมีความยาวเท่ากับความยาวของเอกสารของฉัน (แม็กซ์เลน) หรือไม่ ป้อนทุกคำในแต่ละเอกสารและรับผลลัพธ์ใช่ไหม.....

มีแหล่งข้อมูลออนไลน์ไม่กี่แห่งที่อธิบาย LSTM แต่ในส่วนของการใช้งาน รู้สึกว่ามีไม่มากที่อธิบายได้ชัดเจน...

ขอขอบคุณจริงๆถ้ามีคนสามารถชี้แจงเกี่ยวกับเรื่องนี้

# max_features: vocabulary size
# word vector size: 2
# maxlen: my document size, already padded to the same length
# Build our model
print('Build model...')
model = Sequential()
model.add(Embedding(input_dim=max_features, output_dim= 2, input_length=maxlen ))
model.add(LSTM(units= ???? ))  
model.add(Dense(1))

model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',            
              optimizer='adam',
              metrics=['accuracy'])

person zesla    schedule 24.02.2019    source แหล่งที่มา


คำตอบ (1)


จำนวนหน่วยใน LSTM ไม่เกี่ยวข้องกับมิติข้อมูล หน่วยคือจำนวนเซลล์ประสาท/โหนดในเลเยอร์ LSTM LSTM เป็นเครือข่ายแบบเรียกซ้ำ ซึ่งมีการใช้พารามิเตอร์ซ้ำแล้วซ้ำอีกในเลเยอร์เดียวกัน: ภาพที่นำมาจาก http://colah.github.io/posts/2015-08-Understand-LSTMs/

'A' แสดงถึงเซลล์ LSTM และจำนวน 'A' เท่ากับความยาวอินพุตของคุณ หน่วยแสดงถึงมิติที่ซ่อนอยู่ของ 'A'

person ian    schedule 24.02.2019
comment
ขอบคุณมากสำหรับการชี้แจง! ดังนั้นจำนวน A จะถูก 'ปรับอัตโนมัติ' ให้เท่ากับความยาวเดียวกับความยาวเอกสารของฉัน คำถามอีกข้อหนึ่งคือขนาดเวกเตอร์คำของฉัน (2 ในกรณีนี้) พอดีกับโครงสร้าง lstm อย่างไร มันคือมิติของ x0,x1,x2....? - person zesla; 24.02.2019
comment
จำนวน 'A ในกรณีของคุณคือ maxlen (input_length = maxlen) ฉันไม่ค่อยแน่ใจว่าฉันเข้าใจคำถามของคุณด้วยคำว่า vector size = 2 คำของคุณที่ฉันเดานั้นแสดงด้วยขนาด 1-hot - input_dim=vocabulary (ซึ่งอาจใหญ่กว่า 2) - person ian; 24.02.2019
comment
ฉันมีคำว่าฝังเลเยอร์ ถ้าฉันเข้าใจถูกต้อง มันจะเรียนรู้คำเวกเตอร์จากคำศัพท์ (คำต่อ vec) สำหรับแต่ละคำ จะแสดงเป็นรูปแบบเวกเตอร์ ตรงนี้ ผมใช้เวกเตอร์คำ 2d แต่มันสามารถเป็นมิติใดก็ได้ สิ่งที่ฉันไม่เข้าใจอย่างถ่องแท้คือเวกเตอร์คำเหล่านี้ถูกป้อนเข้าสู่เครือข่าย lstm อย่างไร - person zesla; 24.02.2019
comment
เลเยอร์ที่ฝังจะแปลงแต่ละคำให้เป็นเวกเตอร์ (w2v) จากนั้นเวกเตอร์จะถูกป้อนเข้าไปใน LSTM ด้วยการคูณเมทริกซ์ เช่น. S = a1 a2 เลเยอร์ที่ฝังจะเปลี่ยน a1 เป็นการแสดงเวกเตอร์ จากนั้นจะป้อนไปยังเซลล์ LSTM แรก มิติของการคูณเมทริกซ์คือ: คำที่ฝังไว้: |1| x |output dim (2 ในกรณีของคุณ)| LSTM สลัวที่ซ่อนอยู่ (หน่วย): |หน่วย|. ในช่วงฤดูร้อน การเปลี่ยนแปลงจะเริ่มต้นจาก |1| x |เอาต์พุตสลัว| ถึง |1| x |units| ดังนั้นเวกเตอร์ที่ฝังไว้ของ |1| x |เอาต์พุตสลัว| ถูกคูณด้วยเมทริกซ์น้ำหนักของ |output dim| x |หน่วย|. หวังว่านี่จะช่วยได้ - person ian; 25.02.2019
comment
ตามรูปแบบที่คุณวางไว้ แต่ละ x0, x1,.. เป็นคำเวกเตอร์ (2d ในกรณีของฉัน) จริงไหม? แต่ละอันจะถูกคูณด้วยเมทริกซ์น้ำหนัก 2xunits ซึ่งเกิดขึ้นในแต่ละบล็อก A ขอบคุณมาก. - person zesla; 25.02.2019
comment
ใช่คุณถูกต้อง. รายละเอียดเพิ่มเติม: แต่ละอินพุตเป็นเวกเตอร์ 1-hot ที่มีขนาดของคำศัพท์ dim เลเยอร์ที่ฝังจะเปลี่ยนเป็น dim 2d - person ian; 25.02.2019