首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras Seq2Seq游戏攻略

Keras Seq2Seq游戏攻略
EN

Stack Overflow用户
提问于 2017-10-10 12:32:53
回答 1查看 924关注 0票数 3

几周前,Seq2Seq模型的Keras简介已经发布,可以找到这里。我并不真正理解这个代码的一个部分:

代码语言:javascript
复制
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,那么怎么可能增加一个密集的层后工作呢?

我想我错过了一些东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-10 13:01:47

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

如果你不平整这个3D数据,你的密集层就会表现得好像它会被应用到每一个时间步骤上。你会得到像(batch,timesteps,dense_units)这样的输出

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

代码语言:javascript
复制
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)参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46666907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档