python - Keras中的变分辍学
问题描述
我正在尝试基于 Yarin Gal 和 Zoubin Ghahramani 的论文https://arxiv.org/pdf/1512.05287.pdf在 Python 中使用带有 Tensorflow 后端的 Keras 中定义的变分 RNN 架构来实现 LSTM 神经网络。
这个想法基本上是在每个时间步应用相同的 dropout 掩码,包括输入/输出连接和循环连接,如下图所示:
阅读 Keras 文档,我看到我们可以使用参数dropout
和recurrent_dropout
. 我的第一个问题是:
- 仅使用这些参数,是否在每个时间步都应用了相同的 dropout 掩码?如果没有,有没有办法做到这一点?
然后,我还看到我们可以在 LSTM 单元之后创建一个 Dropout 层,并且使用该noise_shape
参数,我们可以强制该层每次都应用相同的 dropout 掩码。我通过设置来做到这一点noise_shape=(K.shape(x)[0], 1, K.shape(x)[2])
。我的第二个问题是:
- 如果放置在 LSTM 层之后,Dropout 层是否适用于循环连接?
总而言之,我的感觉是,使用第一种方法,我们可以在循环连接上应用 dropout,但我们不能在每个时间步应用相同的 dropout 掩码,而使用第二种方法,情况正好相反。我错了吗?
解决方案
推荐阅读
- swift - 如何以通用方法获取 Firestore 文档 ID?
- javascript - 如何在 VueJS 中将值从一个子组件传递到另一个子组件?
- javafx - JavaFx 从选中的 CheckBox 中获取文本
- python-3.x - 在使用依赖变量和三个自变量的多元回归中实现 OLS 时,numpy 的 Patsy 错误是存在的
- python - db 查询优化与处理可扩展字段的替代方法
- c++ - 如何在 std::reduce 和 std::accumulate 之间进行选择?
- java - LocalDateTime 在 Websphere 服务器中未按预期工作
- node.js - 节点js在转换为json之前合并xlsx列
- reactjs - 如何在基于类的组件中使用状态来检查复选框
- python-3.x - UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfe in position 6208: invalid start byte (Python C-Extension)