Deep learning 如何实施";多向;LSTM?
我试图实现“辍学改善手写识别的递归神经网络”一文中的LSTM体系结构: 在论文中,研究人员将多向LSTM层定义为“四个平行应用的LSTM层,每个层具有特定的扫描方向” 以下是(我认为)Keras网络的样子:Deep learning 如何实施";多向;LSTM?,deep-learning,keras,lstm,Deep Learning,Keras,Lstm,我试图实现“辍学改善手写识别的递归神经网络”一文中的LSTM体系结构: 在论文中,研究人员将多向LSTM层定义为“四个平行应用的LSTM层,每个层具有特定的扫描方向” 以下是(我认为)Keras网络的样子: from keras.layers import LSTM, Dropout, Input, Convolution2D, Merge, Dense, Activation, TimeDistributed from keras.models import Sequential def b
from keras.layers import LSTM, Dropout, Input, Convolution2D, Merge, Dense, Activation, TimeDistributed
from keras.models import Sequential
def build_lstm_dropout(inputdim, outputdim, return_sequences=True, activation='tanh'):
net_input = Input(shape=(None, inputdim))
model = Sequential()
lstm = LSTM(output_dim=outputdim, return_sequences=return_sequences, activation=activation)(net_input)
model.add(lstm)
model.add(Dropout(0.5))
return model
def build_conv(nb_filter, nb_row, nb_col, net_input, border_mode='relu'):
return TimeDistributed(Convolution2D( nb_filter, nb_row, nb_col, border_mode=border_mode, activation='relu')(net_input))
def build_lstm_conv(lstm, conv):
model = Sequential()
model.add(lstm)
model.add(conv)
return model
def build_merged_lstm_conv_layer(lstm_conv, mode='concat'):
return Merge([lstm_conv, lstm_conv, lstm_conv, lstm_conv], mode=mode)
def build_model(feature_dim, loss='ctc_cost_for_train', optimizer='Adadelta'):
net_input = Input(shape=(1, feature_dim, None))
lstm = build_lstm_dropout(2, 6)
conv = build_conv(64, 2, 4, net_input)
lstm_conv = build_lstm_conv(lstm, conv)
first_layer = build_merged_lstm_conv_layer(lstm_conv)
lstm = build_lstm_dropout(10, 20)
conv = build_conv(128, 2, 4, net_input)
lstm_conv = build_lstm_conv(lstm, conv)
second_layer = build_merged_lstm_conv_layer(lstm_conv)
lstm = build_lstm_dropout(50, 1)
fully_connected = Dense(1, activation='sigmoid')
lstm_fc = Sequential()
lstm_fc.add(lstm)
lstm_fc.add(fully_connected)
third_layer = Merge([lstm_fc, lstm_fc, lstm_fc, lstm_fc], mode='concat')
final_model = Sequential()
final_model.add(first_layer)
final_model.add(Activation('tanh'))
final_model.add(second_layer)
final_model.add(Activation('tanh'))
final_model.add(third_layer)
final_model.compile(loss=loss, optimizer=optimizer, sample_weight_mode='temporal')
return final_model
以下是我的问题:
go_backward=True
但是,在您的情况下,您必须编写“镜像”+重塑层以反转行。镜像层可以看起来像(为了方便起见,我在这里使用lambda层):
lambda(lambda x:x[:,:-1,:])
什么是“特定扫描方向”?你的意思是它看起来像“双向RNN”,但在二维网格上?是的。从这篇论文中得出结论:使用多维递归神经网络的脱机手写识别你确定它是“多向的”吗?因为据我所知,MDLSTM代表“多维LSTM”,好吧,我试试这个。我得到结果后再打给你。你有结果吗?我仍然想知道如何实现文本识别的MDLSTM,你有什么参考资料吗?