2016-02-03 32 views
8

Tôi đang cố triển khai trình nhận dạng giọng nói dựa trên LSTM. Cho đến nay tôi có thể thiết lập LSTM hai chiều (tôi nghĩ nó hoạt động như một LSTM hai chiều) bằng cách làm theo ví dụ trong lớp Merge. Bây giờ tôi muốn thử nó với một lớp LSTM hai chiều khác, làm cho nó trở thành một LSTM hai chiều sâu sắc. Nhưng tôi không thể tìm ra cách kết nối đầu ra của hai lớp đã hợp nhất trước đó thành một tập hợp thứ hai của các lớp LSTM. Tôi không biết liệu nó có thể xảy ra với Keras hay không. Hy vọng ai đó có thể giúp tôi với điều này.Làm thế nào để thực hiện LSTM hai chiều sâu với Keras?

Mã cho lớp đơn của tôi hai chiều LSTM như sau

left = Sequential() 
left.add(LSTM(output_dim=hidden_units, init='uniform', inner_init='uniform', 
       forget_bias_init='one', return_sequences=True, activation='tanh', 
       inner_activation='sigmoid', input_shape=(99, 13))) 
right = Sequential() 
right.add(LSTM(output_dim=hidden_units, init='uniform', inner_init='uniform', 
       forget_bias_init='one', return_sequences=True, activation='tanh', 
       inner_activation='sigmoid', input_shape=(99, 13), go_backwards=True)) 

model = Sequential() 
model.add(Merge([left, right], mode='sum')) 

model.add(TimeDistributedDense(nb_classes)) 
model.add(Activation('softmax')) 

sgd = SGD(lr=0.1, decay=1e-5, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy', optimizer=sgd) 
print("Train...") 
model.fit([X_train, X_train], Y_train, batch_size=1, nb_epoch=nb_epoches, validation_data=([X_test, X_test], Y_test), verbose=1, show_accuracy=True) 

Kích thước của x của tôi và các giá trị y như sau.

(100, 'train sequences') 
(20, 'test sequences') 
('X_train shape:', (100, 99, 13)) 
('X_test shape:', (20, 99, 13)) 
('y_train shape:', (100, 99, 11)) 
('y_test shape:', (20, 99, 11)) 

Trả lời

13

Vâng, tôi đã nhận được câu trả lời cho vấn đề được đăng trên vấn đề Keras. Hy vọng điều này sẽ hữu ích cho bất kỳ ai tìm cách tiếp cận này. How to implement deep bidirectional -LSTM

Các vấn đề liên quan