91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch怎么實現簡單自定義網絡層

發布時間:2022-05-20 11:25:09 來源:億速云 閱讀:216 作者:iii 欄目:開發技術

本篇內容介紹了“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]])

三、總結

我們可以通過基本層類設計自定義層。這允許我們定義靈活的新層,其行為與深度學習框架中的任何現有層不同。

在自定義層定義完成后,我們就可以在任意環境和網絡架構中調用該自定義層。

層可以有局部參數,這些參數可以通過內置函數創建。

四、參考

《動手學深度學習》 &mdash; 動手學深度學習 2.0.0-beta0 documentation

https://zh-v2.d2l.ai/

附:pytorch獲取網絡的層數和每層的名字

#創建自己的網絡
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怎么實現簡單自定義網絡層”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邵东县| 福泉市| 定结县| 宁波市| 江山市| 共和县| 阳原县| 右玉县| 广南县| 隆尧县| 和林格尔县| 天祝| 聊城市| 闽侯县| 左云县| 华蓥市| 庆安县| 邹城市| 怀来县| 东阳市| 铅山县| 大冶市| 白玉县| 云南省| 甘洛县| 桃源县| 钟祥市| 绍兴县| 安新县| 西安市| 新闻| 大厂| 龙里县| 延津县| 富蕴县| 大新县| 郎溪县| 和田市| 鲁山县| 长治市| 全南县|