Keras Seq2Seq简介

时间:2017-10-10 12:32:53

标签: deep-learning keras lstm encoder decoder

几周前,Kera对Seq2Seq模型的介绍已经发布here。我真的不明白这段代码的一部分:

decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _= decoder_lstm(decoder_inputs,initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

这里定义了decoder_lstm。它是一个维度latent_dim的图层。我们使用编码器的状态作为解码器的initial_state。

我不明白为什么在LSTM层之后添加致密层以及它为什么工作? 由于return_sequences = True,解码器应该返回所有序列,那么在工作之后添加密集层怎么可能呢?

我想我错过了一些东西。

1 个答案:

答案 0 :(得分:2)

虽然常见案例使用2D数据(batch,dim)作为密集图层的输入,但在较新版本的Keras中,您可以使用3D数据(batch,timesteps,dim)

如果不平整此3D数据,则Dense图层的行为就像应用于每个时间步骤一样。您将获得(batch,timesteps,dense_units)

等输出

您可以检查下面的这两个小模型,并确认与时间步长无关,两个密集层具有相同数量的参数,显示其参数仅适用于最后一个维度。

from keras.layers import *
from keras.models import Model
import keras.backend as K

#model with time steps    
inp = Input((7,12))
out = Dense(5)(inp)
model = Model(inp,out)
model.summary()

#model without time steps
inp2 = Input((12,))
out2 = Dense(5)(inp2)
model2 = Model(inp2,out2)
model2.summary()

结果将在两种情况下显示65(12 * 5 + 5)个参数。