(pytorch-深度学习系列)pytorch实现自定义网络层,并自设定前向传播路径-学习笔记
pytorch實(shí)現(xiàn)自定義網(wǎng)絡(luò)層,并自設(shè)定前向傳播路徑-學(xué)習(xí)筆記
1. 不包含模型參數(shù)的自定義網(wǎng)絡(luò)層
首先我們自定義一個(gè)網(wǎng)絡(luò)層,
定義一個(gè)網(wǎng)絡(luò)層,使其不包含模型參數(shù),并在forward()函數(shù)中進(jìn)行運(yùn)算:
這個(gè)層中沒有模型參數(shù),只在forward中定義了計(jì)算:減去數(shù)據(jù)平均值
實(shí)例化該層并進(jìn)行前向計(jì)算:
layer = non_param_layer() layer(torch.tensor([1, 2, 3, 4, 5], dtype=troch.float))輸出:
tensor([-2., -1., 0., 1., 2.])我們將該層網(wǎng)絡(luò)加入網(wǎng)絡(luò)中:
net = nn.Sequential(nn.Linear(8, 128), non_param_layer())進(jìn)行前向計(jì)算并輸出自定義層的輸出的均值:
y = net(torch.rand(4, 8)) y.mean().item() # 0因?yàn)槲覀冏远x的網(wǎng)絡(luò)層所做的操作是:,每個(gè)輸入減去所有數(shù)據(jù)的均值,所以其輸出的各個(gè)數(shù)值取均值的結(jié)果為0
2. 含有模型參數(shù)的自定義層
與上面一節(jié)不同,我們要自定義一個(gè)含有模型參數(shù)的網(wǎng)絡(luò)層:
之前的blog有講過構(gòu)造深度學(xué)習(xí)模型有很多種方法,其中,使用ParameterList和ParameterDict定以模型比較特別,接下來我們使用這兩種方式自定義網(wǎng)絡(luò)層。
輸出:
MyDense((params): ParameterList((0): Parameter containing: [torch.FloatTensor of size 4x4](1): Parameter containing: [torch.FloatTensor of size 4x4](2): Parameter containing: [torch.FloatTensor of size 4x4](3): Parameter containing: [torch.FloatTensor of size 4x1]) )接下來使用ParameterDict網(wǎng)絡(luò)模型并且自定義網(wǎng)絡(luò)傳播路徑
class dict_dense(nn.Module):def __init__(self):super(dict_dense, self).__init()self.params = nn.ParameterDict({"liner1" : nn.Parameter(troch.randn(4, 4))"liner2" : nn.Parameter(torch.randn(4, 1))})self.params.update({"liner3 : nn.Parameter(torch.randn(4, 2))"})def forward(self, x, choice="liner1"):return torch.mm(x, self.params[choice])net = dict_dense() pritn(net)輸出:
MyDictDense((params): ParameterDict((linear1): Parameter containing: [torch.FloatTensor of size 4x4](linear2): Parameter containing: [torch.FloatTensor of size 4x1](linear3): Parameter containing: [torch.FloatTensor of size 4x2]) )然后可以自己指定網(wǎng)絡(luò)訓(xùn)練的傳播路徑:
x = torch.ones(1, 4) print(net(x, "liner1"))同時(shí),我們還可以使用Sequential將我們自定義的網(wǎng)絡(luò)層加入到網(wǎng)絡(luò)中:
mix_net = nn.Sequential(dict_dense(),my_dense() , )總結(jié)
以上是生活随笔為你收集整理的(pytorch-深度学习系列)pytorch实现自定义网络层,并自设定前向传播路径-学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 自增 不是主键_程序员经典面
- 下一篇: (pytorch-深度学习)SE-Res