pytorch 如何自定義卷積核權(quán)值參數(shù)
pytorch中構(gòu)建卷積層一般使用nn.Conv2d方法,有些情況下我們需要自定義卷積核的權(quán)值weight,而nn.Conv2d中的卷積參數(shù)是不允許自定義的,此時可以使用torch.nn.functional.conv2d簡稱F.conv2d
torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)
F.conv2d可以自己輸入且也必須要求自己輸入卷積權(quán)值weight和偏置bias。因此,構(gòu)建自己想要的卷積核參數(shù),再輸入F.conv2d即可。
下面是一個用F.conv2d構(gòu)建卷積層的例子
這里為了網(wǎng)絡(luò)模型需要寫成了一個類:
class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.weight = nn.Parameter(torch.randn(16, 1, 5, 5)) # 自定義的權(quán)值 self.bias = nn.Parameter(torch.randn(16)) # 自定義的偏置 def forward(self, x): x = x.view(x.size(0), -1) out = F.conv2d(x, self.weight, self.bias, stride=1, padding=0) return out
值得注意的是,pytorch中各層需要訓(xùn)練的權(quán)重的數(shù)據(jù)類型設(shè)為nn.Parameter,而不是Tensor或者Variable。parameter的require_grad默認(rèn)設(shè)置為true,而Varaible默認(rèn)設(shè)置為False。
補充:pytorch中卷積參數(shù)的理解



kernel_size代表著卷積核,例如kernel_size=3或kernel_size=(3,7);
stride:表明卷積核在像素級圖像上行走的步長,如圖2,步長為1;
padding:為上下左右填充的大小,例如padding=0/1/(1,1)/(1,3),
padding=0 不填充;
padding=1/(1,1) 上下左右分別填充1個格;
padding=(1,3) 高(上下)填充2個格,寬(左右)填充6個格;
卷積代碼
torch.nn.Conv2d(512,512,kernel_size=(3,7),stride=2,padding=1)
指定輸出形狀的上采樣
def upsample_add(self,x,y): _,_,H,W = y.size() return F.interpolate(x, size=(H,W), mode='bilinear', align_corners=False) + y
反卷積上采樣
output_shape_w=kernel_size_w+(output_w-1)(kernel_size_w-1)+2padding
self.upscore2 = nn.ConvTranspose2d( 512, 1, kernel_size=3, stride=2,padding=0, bias=False)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持本站。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信