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