几周前,Seq2Seq模型的Keras简介已经发布,可以找到这里。我并不真正理解这个代码的一个部分:
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,那么怎么可能增加一个密集的层后工作呢?
我想我错过了一些东西。
发布于 2017-10-10 13:01:47
虽然常见的情况使用2D数据(batch,dim)作为密集层的输入,但是在新版本的Keras中,您可以使用3D数据(batch,timesteps,dim)。
如果你不平整这个3D数据,你的密集层就会表现得好像它会被应用到每一个时间步骤上。你会得到像(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)参数。
https://stackoverflow.com/questions/46666907
复制相似问题