如何正确使用keras掩膜层?

时间:2016-12-14 06:54:50

标签: python nlp keras recurrent-neural-network

Keras掩模层可用于处理RNN的可变长度序列训练。当我使用它们时,掩模层的准确度低于单批训练。我怀疑我没有正确使用遮罩层。

我的目标是训练LSTM学习如何拼写单词。这些序列是不同的英语单词,用一个热表示法编码。下面是数据编码部分的代码:folder.setSelection(item)是构成序列的所有字母的集合,chars是序列列表,mylist是序列的最大长度。

MAXLEN

我的网络定义为:

char_indices = dict((c, i) for i, c in enumerate(chars))
indices_char = dict((i, c) for i, c in enumerate(chars))

X = np.zeros((len(mylist), MAXLEN, len(chars)), dtype=np.bool)
y = np.zeros((len(mylist), MAXLEN, len(chars)), dtype=np.bool)

for i, sentence in enumerate(mylist):
    for t in range(len(sentence)-Data_end):
        X[i, t, char_indices[sentence[t]]] = 1
        y[i, t, char_indices[sentence[t+1]]] = 1

培训:

model = Sequential()
model.add(Masking(mask_value=0., input_shape=(None, len(chars))))
model.add(LSTM(2000, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(2000, return_sequences=True))
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(len(chars))))
model.add(Activation('softmax'))

sgd = SGD(lr=lr_init, decay=decay_init, momentum=momentum_init, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)
early_stopping = EarlyStopping(patience=2,verbose=1)

我是否正确使用了遮罩层?

0 个答案:

没有答案