[nn.Parameter]理解总结与初始化方法大全
生活随笔
收集整理的這篇文章主要介紹了
[nn.Parameter]理解总结与初始化方法大全
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 一、查看性質(zhì)
- 二、參數(shù)是否初始化的區(qū)別
- 三、參數(shù)初始化的方法
- 1. 均勻分布
- 2. 正太分布
- 3. 常數(shù)分布
- 4. 全1分布
- 5. 全0分布
- 6.單位分布:question:
- 7. xavier_uniform 分布
- 8. xavier_normal 分布
- 9. kaiming_uniform 分布
- 10. kaiming_normal 分布
- 11、正交矩陣
- 12、稀疏矩陣
- 13. 函數(shù)初始化
- 14、遍歷初始化
Parameter實(shí)際上也是Tensor,也就是說(shuō)是一個(gè)多維矩陣,是Variable類(lèi)中的一個(gè)特殊類(lèi)。當(dāng)我們創(chuàng)建一個(gè)model時(shí), parameter會(huì)自動(dòng)累加到Parameter 列表中。(這樣就可以自動(dòng)計(jì)算梯度等)
- 創(chuàng)建一個(gè)model
一、查看性質(zhì)
- 通過(guò).parameters()獲得model的parameter的迭代序列,不是真的List
- 查看具體的參數(shù)可以用for循環(huán)獲取。
- 查看每個(gè)參數(shù)的性質(zhì):數(shù)值(.data),形狀(.shape),數(shù)據(jù)類(lèi)型(.dtype),梯度(.grad)
二、參數(shù)是否初始化的區(qū)別
通過(guò)nn.Parameters()自動(dòng)創(chuàng)建的參數(shù)往往不是我們所需要的參數(shù),比如數(shù)據(jù)出現(xiàn)極小值。
進(jìn)行參數(shù)初始化后的參數(shù)(如下圖)
三、參數(shù)初始化的方法
《Python的torch.nn.Parameter參數(shù)初始化》 值得參考與學(xué)習(xí)👍
import math import numpy as np import torch import torch.nn as nn # 參數(shù)的初始化 w = torch.nn.Parameter(torch.empty(2, 3))1. 均勻分布
# torch.nn.init.uniform_(tensor, a=0, b=1) nn.init.uniform_(w)2. 正太分布
# torch.nn.init.normal_(tensor, mean=0, std=1) nn.init.normal_(w)3. 常數(shù)分布
# torch.nn.init.constant_(tensor, value) nn.init.constant_(w, 0.3)4. 全1分布
# torch.nn.init.ones_(tensor) torch.nn.init.ones_(w)5. 全0分布
# torch.nn.init.zeros_(tensor) torch.nn.init.zeros_(w)6.單位分布?
# torch.nn.init.eye_(tensor) nn.init.eye_(w)7. xavier_uniform 分布
# torch.nn.init.xavier_uniform_(tensor, gain=1) # calculate_gain 返回默認(rèn)增益值 a = nn.init.calculate_gain('relu') # 1.414 nn.init.xavier_uniform_(w, gain=a)8. xavier_normal 分布
# torch.nn.init.xavier_normal_(tensor, gain=1) nn.init.xavier_normal_(w) # 默認(rèn)gain=19. kaiming_uniform 分布
# torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu') nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')10. kaiming_normal 分布
# torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu') nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')11、正交矩陣
# torch.nn.init.orthogonal_(tensor, gain=1) nn.init.orthogonal_(w)12、稀疏矩陣
# torch.nn.init.sparse_(tensor, sparsity, std=0.01) # 非零元素采用正態(tài)分布 N(0, 0.01) 初始化. nn.init.sparse_(w, sparsity=0.1)13. 函數(shù)初始化
# 13. Dirac delta 函數(shù)初始化,僅適用于 {3, 4, 5} 維的 torch.Tensor # torch.nn.init.dirac_(tensor) b = torch.empty(3, 16, 5, 5) # 是根據(jù)輸入的size信息生成張量的方法,不需要主動(dòng)初始化,其dtype默認(rèn)torch.folat32 nn.init.dirac_(b) c = torch.tensor(np.array([1, 2, 3.])) # torch.tensor()則是復(fù)制輸入的數(shù)據(jù)再生成張量的方法,其dtype默認(rèn)輸入數(shù)據(jù)的dtype# 舉例 # 1 一層一層單獨(dú)初始化 # conv 與 bn conv = nn.Conv2d(1, 3, kernel_size=1) # init.kaiming_uniform_(self.weight, a=math.sqrt(5)) ## nn.Conv2d()的weight的默認(rèn)的初始化方式 # fan_in, _ = init._calculate_fan_in_and_fan_out(self.weight) # bound = 1 / math.sqrt(fan_in) # init.uniform_(self.bias, -bound, bound) ## nn.Conv2d()的bias的默認(rèn)的初始化方式 nn.init.kaiming_normal_(conv.weight, mode='fan_in') nn.init.constant_(conv.bias, 0.)bn = nn.BatchNorm2d(3), # init.ones_(self.weight) ## nn.BatchNorm2d()的weight的默認(rèn)的初始化方式 # init.zeros_(self.bias) ## nn.BatchNorm2d()的bias的默認(rèn)的初始化方式 nn.init.normal_(bn[0].weight, mean=1., std=0.02) nn.init.constant_(bn[0].bias, 0.)14、遍歷初始化
1 .舉例1: 見(jiàn)開(kāi)頭的案例中方式,并不會(huì)自動(dòng)初始化。如果想要model在實(shí)例化的時(shí)候自動(dòng)初始化。則在__init__()添加一條語(yǔ)句 self.reset_parameters()。
查看結(jié)果
總結(jié)
以上是生活随笔為你收集整理的[nn.Parameter]理解总结与初始化方法大全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何查询网站IP地址
- 下一篇: 探戈 - 维基百科,自由的百科全书