在LSTM模型中调用_generate_dropout_mask的位置

时间:2017-10-06 19:06:44

标签: keras keras-layer

问题的背景

我正在创建自己的重复层并希望允许丢失,因此我希望能够以类似于LSTM的方式定义丢失掩码。

我注意到他们在方法中定义了掩码。

问题

为了创建成员变量_generate_dropout_mask而调用keras.layers.recurrent.LSTMCell方法dropout_mask的时间和地点?

我已经在github存储库中搜索了_generate_dropout_mask,试图查看它是否在某个地方调用,除keras.layers.recurrent模块外,无法在任何地方找到它。

是否有一部分培训可能会在前面添加一个下划线来查找所有可调用图层属性,并在keras.layer.build()之前运行它们?由于dropout仅用于训练,并且由于掩码必须在构建之前可用,我怀疑这一点,因为这可能允许层使用非核心符号来定义预构建方法。

1 个答案:

答案 0 :(得分:0)

该方法是班级SimpleRNNCell(Layer)L659的成员。

单元格是SimpleRNN(RNN)类的成员,在init方法中定义,并传递给超类RNN。按照以下行:L919,L933,L339,L357。

该方法在图层的call方法L942内调用。

当您call构建功能API模型的层时,将逐字调用call方法。不确定Sequential()模型何时会调用build。但它肯定在编译之前,或者至少在编译之前。这是一个只发生一次的阶段,并将所有张量从输入链接到输出,创建实际的内部图形。

您可以使用dir(instance)查找所有方法 您可以使用getattr(instance,methodName)(...)来调用该方法。

build()在训练前被召唤。在使用功能API模型创建图形时,第一次调用图层时会调用它。