几周前,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
,解码器应该返回所有序列,那么在工作之后添加密集层怎么可能呢?
我想我错过了一些东西。
答案 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)个参数。