序列到序列模型的效果不佳

时间:2019-01-14 09:46:48

标签: keras lstm recurrent-neural-network autoencoder sequence-to-sequence

我正在尝试构建一个seq2seq自动编码器,该编码器应具有捕获序列逻辑并能够从状态向量重构它的能力。我正在使用一些示例序列来测试模型是否能够执行非常简单的任务版本。为此,我有类似“ <> <> <> ...”或“(。)(。)(。)...”的序列。

模型的基本代码如下:

n_hidden = 256
emb_dim = 16
n_tokens = 559

#Encoder
enc_inp = Input(shape=(None,))
emb_layer = Embedding(input_dim=n_tokens, output_dim=emb_dim)
enc_emb = emb_layer(enc_inp)
enc_layer = LSTM(n_hidden, return_state=True)
enc, state_h, state_c = enc_layer(enc_emb)

#Decoder
dec_inp = Input(shape=(None,))
dec_emb = emb_layer(dec_inp)
dec_layer = LSTM(n_hidden, return_sequences=True, return_state=True)
dec, _, _ = dec_layer(dec_emb, initial_state=[state_h, state_c])
dense_layer = Dense(n_tokens, activation='softmax')
res = dense_layer(dec)

model = Model([enc_inp, dec_inp], res)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])


#Models for Inference

#Encoder
encoder_model = Model(enc_inp, [state_h, state_c])

#Decoder
state_inp1 = Input(shape=(n_hidden,))
state_inp2 = Input(shape=(n_hidden,))   
dec, state_h, state_c = dec_layer(dec_emb, initial_state=[state_inp1, state_inp2])
res = dense_layer(dec)

decoder_model = Model([dec_inp] + [state_inp1, state_inp2], [res] + [state_h, state_c])

编码器输入是整数编码的字符,这些字符被嵌入层转换为矢量。解码器输入与编码器输入相同,但起始标记附加在开头,因此向右移动一个。训练中使用的结果是一键编码的编码器输入。

现在,模型师的表现不是很好,而只能一遍又一遍地预测第一个字符,所以对于:
原始:'<> <> <> ...',预测:'<<<<<< ...... << 原始值:“(。)(。)(。)...”,预测值:“(((((((......

这仅仅是培训问题还是我在这里犯了一些严重的错误?

0 个答案:

没有答案