K.W*_*ter 5 python nlp keras recurrent-neural-network
Keras遮罩层可用于处理RNN的可变长度序列训练。当我使用它们时,与单批训练相比,蒙版层的准确性较低。我怀疑我没有正确使用遮罩层。
我的目标是训练LSTM学习如何拼写单词。这些序列是不同的英语单词,用一键表示编码。以下是数据编码部分的代码: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
Run Code Online (Sandbox Code Playgroud)
我的网络定义为:
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)
Run Code Online (Sandbox Code Playgroud)
训练:
model.fit(X, y, callbacks=[early_stopping],batch_size=32, nb_epoch=1)
Run Code Online (Sandbox Code Playgroud)
我是否正确使用遮罩层?
| 归档时间: |
|
| 查看次数: |
2638 次 |
| 最近记录: |