Stabilizer()块和enable_self_stabilization参数之间有什么区别?

时间:2017-02-28 22:55:29

标签: cntk

我应该何时使用其中一种?教程和示例使用Examples / common / nn.py中的Sequential([Stabilizer(), Recurrence(LSTM(hidden_dim))])LSTMP_component_with_self_stabilization。我尝试在char_rnn.py示例中用Recurrence(LSTM(hidden_dim, enable_self_stabilization=True))替换前者,但结果明显更糟。

1 个答案:

答案 0 :(得分:4)

Stabilizer图层将其输入与可学习的标量相乘。这个简单的技巧已被证明可以显着提高收敛性和稳定性。它与BatchNormalization有一些相似之处。通常,当您可以使用BatchNormalization时,您应该先尝试使用Stabilizer。如果不可能,特别是在循环循环中,我建议改为使用LSTM

通常,您必须在模型中明确地注入它。一个特殊情况是循环步骤函数(例如Stabilizer),其中包含enable_self_stabilization=True s。使用Stabilizer启用它。那些内置的Stabilizer仅适用于内部变量。对于主输入,您必须自己插入Stabilizer

如果您包含明确的enable_self_stabilization=False但是设置default_option(例如Stabilizer),则那些明确的Stabilizer是无操作。

// C99 FILE *fp = fopen("file", "r"); size_t filesize; fseek(fp, 0, SEEK_END); filesize = ftell(fp); fseek(fp, 0, SEEK_SET); char *filetext = malloc(filesize + 1); fread(filetext, 1, filesize, fp); filetext[filesize] = 0; 让事情变得更糟,这不是我的经验。改善融合通常是一件肯定的事情。但它会改变数值范围。因此,如果它使收敛变差,我建议尝试不同的超参数设置,例如降低学习率。