PyTorch學習系列(九)——參數_初始化


from:http://blog.csdn.net/VictoriaW/article/details/72872036

之前我學習了神經網絡中權值初始化的方法

那么如何在pytorch里實現呢。

PyTorch提供了多種參數初始化函數:

注意上面的初始化函數的參數tensor,雖然寫的是tensor,但是也可以是Variable類型的。而神經網絡的參數類型Parameter是Variable類的子類,所以初始化函數可以直接作用於神經網絡參數。

示例:

self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3)
init.xavier_uniform(self.conv1.weight)
init.constant(self.conv1.bias, 0.1)

 

上面的語句是對網絡的某一層參數進行初始化。如何對整個網絡的參數進行初始化定制呢?

 
def weights_init(m):
    classname=m.__class__.__name__
    if classname.find('Conv') != -1:
        xavier(m.weight.data)
        xavier(m.bias.data)
net = Net()
net.apply(weights_init) #apply函數會遞歸地搜索網絡內的所有module並把參數表示的函數應用到所有的module上。   

不建議訪問以下划線為前綴的成員,他們是內部的,如果有改變不會通知用戶。更推薦的一種方法是檢查某個module是否是某種類型:

def weights_init(m):
    if isinstance(m, nn.Conv2d):
        xavier(m.weight.data)
        xavier(m.bias.data)     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM