torch.nn.utils.weight_norm¶
- torch.nn.utils.weight_norm(module, name='weight', dim=0)[原始碼][原始碼]¶
將權重歸一化應用於給定模組中的引數。
權重歸一化是一種重引數化技術,它將權重張量的幅度和方向解耦。它將由
name指定的引數(例如'weight')替換為兩個引數:一個指定幅度(例如'weight_g'),另一個指定方向(例如'weight_v')。權重歸一化透過一個鉤子實現,該鉤子在每次呼叫forward()之前根據幅度和方向重新計算權重張量。預設情況下,當
dim=0時,範數會獨立地按每個輸出通道/平面計算。要計算整個權重張量的範數,請使用dim=None。參見 https://arxiv.org/abs/1602.07868
警告
此函式已廢棄。請使用
torch.nn.utils.parametrizations.weight_norm(),它使用現代的 parametrization API。新的weight_norm與舊版weight_norm生成的state_dict相容。遷移指南
幅度 (
weight_g) 和方向 (weight_v) 現在分別表示為parametrizations.weight.original0和parametrizations.weight.original1。如果您對此感到困擾,請在 https://github.com/pytorch/pytorch/issues/102999 評論。要移除權重歸一化的重引數化,請使用
torch.nn.utils.parametrize.remove_parametrizations()。權重不再在模組前向傳播時一次性重新計算;相反,它會在每次訪問時重新計算。要恢復舊的行為,請在呼叫相關模組之前使用
torch.nn.utils.parametrize.cached()。
- 引數
- 返回
應用了權重歸一化鉤子的原始模組
- 返回型別
T_module
示例
>>> m = weight_norm(nn.Linear(20, 40), name='weight') >>> m Linear(in_features=20, out_features=40, bias=True) >>> m.weight_g.size() torch.Size([40, 1]) >>> m.weight_v.size() torch.Size([40, 20])