我应该何时使用其中一种?教程和示例使用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))
替换前者,但结果明显更糟。
答案 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;
让事情变得更糟,这不是我的经验。改善融合通常是一件肯定的事情。但它会改变数值范围。因此,如果它使收敛变差,我建议尝试不同的超参数设置,例如降低学习率。