1. 程式人生 > 程式設計 >Pytorch實現各種2d卷積示例

Pytorch實現各種2d卷積示例

普通卷積

使用nn.Conv2d(),一般還會接上BN和ReLu

引數量NNCin*Cout+Cout(如果有bias,相對來說表示對引數量影響很小,所以後面不考慮)

class ConvBNReLU(nn.Module):

 def __init__(self,C_in,C_out,kernel_size,stride,padding,affine=True):
  super(ConvBNReLU,self).__init__()
  self.op = nn.Sequential(
   nn.Conv2d(C_in,stride=stride,padding=padding,bias=False),nn.BatchNorm2d(C_out,eps=1e-3,affine=affine),nn.ReLU(inplace=False)
  )

 def forward(self,x):
  return self.op(x)

深度可分離卷積depthwise separable convolution

卷積操作可以分為NN 的Depthwise卷積(不改變通道數)和11的Pointwise卷積(改變為輸出通道數),同樣後接BN,ReLU。引數量明顯減少

引數量:

NNCin+Cin11*Cout

class SepConv(nn.Module):
 
 def __init__(self,affine=True):
  super(SepConv,self).__init__()
  self.op = nn.Sequential(
   nn.ReLU(inplace=False),nn.Conv2d(C_in,kernel_size=kernel_size,groups=C_in,kernel_size=1,padding=0,affine=affine)
   )
 def forward(self,x):
  return self.op(x)

空洞卷積dilated convolution

空洞卷積(dilated convolution)是針對影象語義分割問題中下采樣會降低影象解析度、丟失資訊而提出的一種卷積思路。利用新增空洞擴大感受野。

引數量不變,但感受野增大(可結合深度可分離卷積實現)

class DilConv(nn.Module):
  
 def __init__(self,dilation,affine=True):
  super(DilConv,dilation=dilation,)

 def forward(self,x):
  return self.op(x)

Identity

這個其實不算卷積操作,但是在實現跨層傳遞捷徑

class Identity(nn.Module):

 def __init__(self):
  super(Identity,self).__init__()

 def forward(self,x):
  return x

以上這篇Pytorch實現各種2d卷積示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。