nn.init.uniform_
是 PyTorch 中用于初始化張量(tensor)的一個函數,它的作用是將張量的值填充為從均勻分布中采樣的隨機數。
詳細說明:
-
函數:
torch.nn.init.uniform_(tensor, a=0., b=1.)
tensor
:需要被初始化的張量。a
:均勻分布的下界,默認值為 0.0。b
:均勻分布的上界,默認值為 1.0。
-
作用:
- 該函數會將輸入張量的值填充為從均勻分布 ( U(a, b) ) 中采樣的隨機數。均勻分布 ( U(a, b) ) 的概率密度函數在區間 ([a, b]) 內是常數,在區間外是 0。
- 這在深度學習中通常用于初始化神經網絡的權重參數。通過將權重初始化為均勻分布的隨機值,可以打破對稱性,使神經網絡在訓練時能夠有效學習。
-
示例:
import torch import torch.nn as nn# 創建一個 3x3 的張量 weights = torch.empty(3, 3)# 使用均勻分布初始化張量,范圍是 [-0.1, 0.1] nn.init.uniform_(weights, a=-0.1, b=0.1)print(weights)
輸出:
tensor([[ 0.0543, -0.0321, 0.0892],[-0.0987, 0.0456, -0.0123],[ 0.0765, -0.0654, 0.0345]])
-
常見用途:
- 在神經網絡的初始化中,均勻分布初始化是一種常見的策略。它可以幫助模型在訓練初期避免權重值過大或過小,從而促進梯度的有效傳播。
- 與 Xavier 初始化(也稱為 Glorot 初始化)和 He 初始化等其他初始化方法相比,均勻分布初始化簡單直接,但在某些情況下可能不如這些方法效果好。
-
注意事項:
- 選擇合適的初始化方法和范圍對模型的訓練和性能至關重要。均勻分布初始化的范圍通常需要根據網絡的結構和任務進行調整。
nn.init.uniform_
與torch.nn.init.uniform
是同一個函數,區別在于后者返回初始化后的張量,而前者直接在原地(in-place)修改輸入張量。