我正在训练一个简单的前馈模型,在每个(隐藏层+非线性)组合之间有3或4个隐藏层和丢失。 有时在几个纪元(大约10-11)之后,模型开始输出Infs和NaN作为NLL的误差,精度下降到0.0%。当我不使用dropouts时,不会发生此问题。这是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是我们要应用dropouts的feature-vector。 我还观察到,如果辍学概率(self.p)更高,则NaN的出现会更早发生。 p = 0.5会导致NaNs出现在1或2纪元附近,但p = 0.7会导致NaNs出现在10或11纪元附近。 此外,只有当隐藏的图层大小很大时才会出现NaN。例如(800,700,700)给出了NaN,而(500,500,500)没有。
答案 0 :(得分:0)
根据我的经验,NaNs在训练网络时通常会因为两个问题而发生:
在你的情况下,从你的良好观察,我认为这是第二种情况。您的损失值可能会变得太大而无法通过python处理。尝试扩展网络时尝试初始化较小的权重。或者只是使用不同的方法来初始化权重,如Glorot (2010)或He (2015)所述。希望它有所帮助。