您好,登錄后才能下訂單哦!
本篇內容介紹了“Pytorch怎么實現簡單自定義網絡層”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
首先,我們構造一個沒有任何參數的自定義層,要構建它,只需繼承基礎層類并實現前向傳播功能。
import torch import torch.nn.functional as F from torch import nn class CenteredLayer(nn.Module): def __init__(self): super().__init__() def forward(self, X): return X - X.mean()
輸入一些數據,驗證一下網絡是否能正常工作:
layer = CenteredLayer() print(layer(torch.FloatTensor([1, 2, 3, 4, 5])))
輸出結果如下:
tensor([-2., -1., 0., 1., 2.])
運行正常,表明網絡沒有問題。
現在將我們自建的網絡層作為組件合并到更復雜的模型中,并輸入數據進行驗證:
net = nn.Sequential(nn.Linear(8, 128), CenteredLayer()) Y = net(torch.rand(4, 8)) print(Y.mean()) # 因為模型參數較多,輸出也較多,所以這里輸出Y的均值,驗證模型可運行即可
結果如下:
tensor(-5.5879e-09, grad_fn=<MeanBackward0>)
這里使用內置函數來創建參數,這些函數可以提供一些基本的管理功能,使用更加方便。
這里實現了一個簡單的自定義的全連接層,大家可根據需要自行修改即可。
class MyLinear(nn.Module): def __init__(self, in_units, units): super().__init__() self.weight = nn.Parameter(torch.randn(in_units, units)) self.bias = nn.Parameter(torch.randn(units,)) def forward(self, X): linear = torch.matmul(X, self.weight.data) + self.bias.data return F.relu(linear)
接下來實例化類并訪問其模型參數:
linear = MyLinear(5, 3) print(linear.weight)
結果如下:
Parameter containing:
tensor([[-0.3708, 1.2196, 1.3658],
[ 0.4914, -0.2487, -0.9602],
[ 1.8458, 0.3016, -0.3956],
[ 0.0616, -0.3942, 1.6172],
[ 0.7839, 0.6693, -0.8890]], requires_grad=True)
而后輸入一些數據,查看模型輸出結果:
print(linear(torch.rand(2, 5))) # 結果如下 tensor([[1.2394, 0.0000, 0.0000], [1.3514, 0.0968, 0.6667]])
我們還可以使用自定義層構建模型,使用方法與使用內置的全連接層相同。
net = nn.Sequential(MyLinear(64, 8), MyLinear(8, 1)) print(net(torch.rand(2, 64))) # 結果如下 tensor([[4.1416], [0.2567]])
我們可以通過基本層類設計自定義層。這允許我們定義靈活的新層,其行為與深度學習框架中的任何現有層不同。
在自定義層定義完成后,我們就可以在任意環境和網絡架構中調用該自定義層。
層可以有局部參數,這些參數可以通過內置函數創建。
《動手學深度學習》 — 動手學深度學習 2.0.0-beta0 documentation
https://zh-v2.d2l.ai/
#創建自己的網絡 import models model = models.__dict__["resnet50"](pretrained=True) for index ,(name, param) in enumerate(model.named_parameters()): print( str(index) + " " +name)
結果如下:
0 conv1.weight
1 bn1.weight
2 bn1.bias
3 layer1.0.conv1.weight
4 layer1.0.bn1.weight
5 layer1.0.bn1.bias
6 layer1.0.conv2.weight
7 layer1.0.bn2.weight
8 layer1.0.bn2.bias
9 layer1.0.conv3.weight
“Pytorch怎么實現簡單自定義網絡層”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。