梯度消失和梯度爆炸以及batch normalization

梯度消失和梯度爆炸的詳細講解

莫煩的視頻講解BN

github代碼地址

        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能提高反向傳播效率,有效解決梯度消失的問題

發佈了358 篇原創文章 · 獲贊 113 · 訪問量 82萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章