for i in range(N_HIDDEN): # build hidden layers and BN layers
input_size = 1 if i == 0 else 10
fc = nn.Linear(input_size, 10)
setattr(self, 'fc%i' % i, fc) # IMPORTANT set layer to the Module
self._set_init(fc) # parameters initialization
self.fcs.append(fc)
if self.do_bn:
bn = nn.BatchNorm1d(10, momentum=0.5)
setattr(self, 'bn%i' % i, bn) # IMPORTANT set layer to the Module
self.bns.append(bn)
思考:
1.上面代碼講解每一層都加一個BN,N_HIDDEN多個層,可以使用self.fcs來添加多個層
2.如果沒有BN,那麼時間久以後,樣本都在激活函數的左右兩邊,就會出現梯度消失
3.如果激活函數在是relu那麼會出現梯度爆炸
4.使用BN能提高反向傳播效率,有效解決梯度消失的問題