(pytorch-深度学习系列)pytorch实现自定义网络层,并自设定前向传播路径-学习笔记
生活随笔
收集整理的這篇文章主要介紹了
(pytorch-深度学习系列)pytorch实现自定义网络层,并自设定前向传播路径-学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
pytorch實現自定義網絡層,并自設定前向傳播路徑-學習筆記
1. 不包含模型參數的自定義網絡層
首先我們自定義一個網絡層,
定義一個網絡層,使其不包含模型參數,并在forward()函數中進行運算:
這個層中沒有模型參數,只在forward中定義了計算:減去數據平均值
實例化該層并進行前向計算:
layer = non_param_layer() layer(torch.tensor([1, 2, 3, 4, 5], dtype=troch.float))輸出:
tensor([-2., -1., 0., 1., 2.])我們將該層網絡加入網絡中:
net = nn.Sequential(nn.Linear(8, 128), non_param_layer())進行前向計算并輸出自定義層的輸出的均值:
y = net(torch.rand(4, 8)) y.mean().item() # 0因為我們自定義的網絡層所做的操作是:,每個輸入減去所有數據的均值,所以其輸出的各個數值取均值的結果為0
2. 含有模型參數的自定義層
與上面一節不同,我們要自定義一個含有模型參數的網絡層:
之前的blog有講過構造深度學習模型有很多種方法,其中,使用ParameterList和ParameterDict定以模型比較特別,接下來我們使用這兩種方式自定義網絡層。
輸出:
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網絡模型并且自定義網絡傳播路徑
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]) )然后可以自己指定網絡訓練的傳播路徑:
x = torch.ones(1, 4) print(net(x, "liner1"))同時,我們還可以使用Sequential將我們自定義的網絡層加入到網絡中:
mix_net = nn.Sequential(dict_dense(),my_dense() , )總結
以上是生活随笔為你收集整理的(pytorch-深度学习系列)pytorch实现自定义网络层,并自设定前向传播路径-学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 自增 不是主键_程序员经典面
- 下一篇: 中国数学发展简史