辍学如何在keras' LSTM层?

时间:2018-04-18 11:02:16

标签: machine-learning keras keras-layer

在keras' documentation没有关于LSTM层实际实现丢失的信息。

但是,有一个链接到论文" A Theoretically Grounded Application of Dropout in Recurrent Neural Networks",这让我相信辍学是按照所述论文所述实施的。

也就是说,对于图层正在处理的时间序列中的每个时间步长,使用相同的丢失掩码。

查看source code,在我看来,LSTMCell.call被迭代调用,一次用于时间序列中的每个时间步,并且每次调用时都会生成一个新的丢失掩码。

我的问题是:

要么我误解了keras'代码,或者在keras'中对论文的引用。文档具有误导性。这是什么?

1 个答案:

答案 0 :(得分:1)

论文和代码都是一致的。你已经理解正确,但解释了有点错误。

在初始化dropout_mask self._dropout_mask is None

之前进行检查

因此,对于时间序列中的每个时间步,迭代地调用LSTMCell.call,但仅在第一次调用中生成新的丢失掩码。

if 0 < self.dropout < 1 and self._dropout_mask is None:
    self._dropout_mask = _generate_dropout_mask(
        K.ones_like(inputs),
        self.dropout,
        training=training,
        count=4)
if (0 < self.recurrent_dropout < 1 and
        self._recurrent_dropout_mask is None):
    self._recurrent_dropout_mask = _generate_dropout_mask(
        K.ones_like(states[0]),
        self.recurrent_dropout,
        training=training,
        count=4)

希望澄清你的疑问。