Deep learning LSTM模型打印尾随的垃圾字符

Deep learning LSTM模型打印尾随的垃圾字符,deep-learning,keras,lstm,Deep Learning,Keras,Lstm,我正在训练一个用于拼写纠正的seq2seq模型,改编自 我的模型很好地学习了如何纠正拼写错误,但出于某种原因,它也会打印尾随的无意义字符。例如: 错别字:一些新鲜的沙箱作为装饰 正确:一些新鲜韭菜做装饰 预测:一些新鲜的韭菜作为装饰(Hngghnn()()()())))(ssssssssssssssssssssssssssssssssss Keras中模型的架构如下所示: model = Sequential() # Add masking layer model.add(Masking(ma

我正在训练一个用于拼写纠正的seq2seq模型,改编自

我的模型很好地学习了如何纠正拼写错误,但出于某种原因,它也会打印尾随的无意义字符。例如:

错别字:一些新鲜的沙箱作为装饰

正确:一些新鲜韭菜做装饰

预测:一些新鲜的韭菜作为装饰(Hngghnn()()()())))(ssssssssssssssssssssssssssssssssss

Keras中模型的架构如下所示:

model = Sequential()

# Add masking layer
model.add(Masking(mask_value=0., input_shape=(None, len(chars))))

# "Encode" the input sequence using an RNN, producing an output of hidden_size
# note: in a situation where your input sequences have a variable length,
# use input_shape=(None, nb_feature).
for layer_number in range(CONFIG.input_layers):
    model.add(recurrent.LSTM(CONFIG.hidden_size, input_shape=(None, len(chars)), kernel_initializer=CONFIG.initialization,
                             return_sequences=layer_number + 1 < CONFIG.input_layers))
    model.add(Dropout(CONFIG.amount_of_dropout))
# For the decoder's input, we repeat the encoded input for each time step
model.add(RepeatVector(output_len))
# The decoder RNN could be multiple layers stacked or a single layer
for _ in range(CONFIG.output_layers):
    model.add(recurrent.LSTM(CONFIG.hidden_size, return_sequences=True, kernel_initializer=CONFIG.initialization))
    model.add(Dropout(CONFIG.amount_of_dropout))

# For each of step of the output sequence, decide which character should be chosen
model.add(TimeDistributed(Dense(len(chars), kernel_initializer=CONFIG.initialization)))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
model=Sequential()
#添加遮罩层
添加(掩蔽(掩蔽值=0,输入形状=(无,长度(字符)))
#使用RNN“编码”输入序列,产生隐藏大小的输出
#注意:在输入序列长度可变的情况下,
#使用输入_形状=(无,nb_特征)。
对于范围内的层编号(配置输入层):
add(recurrent.LSTM(CONFIG.hidden_size,input_shape=(None,len(chars)),kernel_initializer=CONFIG.initialization,
返回\u序列=层\u编号+1

知道我做错了什么吗?

已解决。我在训练中插入了一个序列尾端字符来标点每个序列的结尾,模型通过在预测时插入序列尾端字符来学习如何结束序列。