python - 为什么我的 Keras LSTM 不需要 TimeDistributed?
问题描述
我知道这个话题有很多问题,但我不明白为什么在我的情况下这两种选择都是可能的。我在 LSTM 中的输入形状是 (10,24,2),我的 hidden_size 是 8。
model = Sequential()
model.add(LSTM(hidden_size, return_sequences=True, stateful = True,
batch_input_shape=((10, 24, 2))))
model.add(Dropout(0.1))
为什么可以在下面添加这一行:
model.add(TimeDistributed(Dense(2))) # Option 1
或者这个:
model.add(Dense(2)) # Option 2
不应该Option 2
导致编译错误,因为它需要二维输入?
解决方案
在您的情况下,您定义的 2 个模型是相同的。
这是由于您使用参数这一事实造成的,return_sequences=True
这意味着该Dense
层应用于每个时间步,就像TimeDistributedDense
但如果您切换到False
那么 2 个模型不相同,并且在TimeDistributedDense
版本的情况下会引发错误,但不是在Dense
一个版本中。
这里也对类似情况提供了更彻底的解释。
推荐阅读
- java - 如何获得准备好嵌入的 Mac JRE(在 linux 上)?
- r - 如何获取所有arimas训练集数据R
- java - 在 Spring @Value('#{SPEL}) 中使用 Java 类
- webview - 如何访问Android Webview javascriptEvaluate返回值外部onReceiveValue
- node.js - 如何在javascript中使请求等待?
- bash - 通过 xargs 中的命令 bash 一次移动文件是有效的,但没有 bashm,它不起作用
- python - ATBSWP 第 3 章练习项目 - 斗智在 6 小时后结束,是的,告诉我吧
- ruby - 在模型中包含自定义模块后注释gem不起作用
- java - 使用 Coldfusion 访问 tyro 支付网关
- javascript - 如何在不重复整个对象的情况下返回几乎相似的对象