我正在训练一个简单的前馈模型,该模型具有3或4个隐藏层以及每个(隐藏层+非线性)组合之间的缺失。有时,经过几个时间段(大约10-11)后,由于NLL的误差,该模型开始输出Infs和NaNs,而精度下降到0.0%。当我不使用辍学时,不会发生此问题。这是Theano辍学的已知问题吗?我实现辍学的方法是:
def drop(self, input):
mask = self.theano_rng.binomial(n=1, p=self.p, size=input.shape, dtype=theano.config.floatX)
return input * mask
其中input是要在其上应用dropout的特征向量。我还观察到,如果辍学概率(self.p)较高,则NaN的发生会更早发生。p = 0.5将导致在第1或第2周期附近发生NaN,但p = 0.7将导致在第10或11周期附近发生NaN。此外,仅当隐藏层大小较大时,NaN才会发生。例如,(800,700,700)给出NaN,而(500,500,500)则没有。
以我的经验,NaN在训练网络时通常会由于两个问题而发生:
就您而言,从您的良好观察来看,我认为这是第二种情况。您的损失值可能变得太大,无法由python处理。尝试扩展网络时,尝试初始化较小的权重。或者只是使用不同的方法来初始化权重,如Glorot(2010)或He(2015)所述。希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句