PyTorch筆記--卷積的實現


卷積的模塊在PyTorch中分為一維、二維和三維。在函數名上的體現是1d、2d、3d。


torch.nn.Conv1d

一維卷積層,輸入的尺度是(N, C_in,L_in),輸出尺度(N,C_out,L_out)。一維卷積一般用於文本數據,只對寬度進行卷積,對高度不卷積。

class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

 

 

torch.nn.Conv2d

二維卷積層, 輸入的尺度是(N, C_in,H,W),輸出尺度(N,C_out,H_out,W_out)

class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

 

 

torch.nn.Conv3d

三維卷積層, 輸入的尺度是(N, C_in,D,H,W),輸出尺度(N,C_out,D_out,H_out,W_out)
class torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
 
        
參數說明:
  • in_channels(int) – 輸入信號的通道
  • out_channels(int) – 卷積產生的通道
  • kerner_size(int or tuple) - 卷積核的尺寸
  • stride(int or tupleoptional) - 卷積步長
  • padding (int or tupleoptional)- 輸入的每一條邊補充0的層數
  • dilation(int or tuple, `optional``) – 卷積核元素之間的間距
  • groups(intoptional) – 從輸入通道到輸出通道的阻塞連接數
  • bias(booloptional) - 如果bias=True,添加偏置

 

這幾個函數怎么選擇就是要看輸入的維數。

Conv1d用於三維張量(N,C,L)

 

layer = nn.Conv1d(3, 16, kernel_size=3)
x = torch.rand(4, 3, 50)
out = layer.forward(x)
print(out.shape)

 

輸出

torch.Size([4, 16, 48])

 

 

Conv2d用於四維張量(N,C,H,W)

layer = nn.Conv2d(1, 3, kernel_size=3, stride=1, padding=0)  
# 輸入通道1;輸出通道3;卷積核3x3;卷積核步長為1;不填充
x = torch.rand(1, 1, 28, 28) 
out = layer.forward(x) # 進行一次卷積的前向運算
print(out.shape)

輸出

torch.Size([1, 3, 26, 26])

 

Conv3d用於五維張量(N,C,D,H,W)

layer = nn.Conv3d(3, 16, kernel_size=3, padding=1)
x = torch.rand(4, 3, 28, 28, 28)
out = layer.forward(x)
print(out.shape)

輸出

torch.Size([4, 16, 28, 28, 28])

 

 

輸出圖像的尺寸計算:

O:輸出圖像的尺寸

I:輸入圖像的尺寸

K:卷積核的尺寸

N:卷積核數量

S:移動步長

P:填充數

 

 

參數數量的計算:

2d卷積

輸入層: Win*Hin*Cin  (N個)

超參數:

過濾器個數(輸出通道數):Cout

卷積核維度:w*h

參數量:(w*h*Cin+1)*Cout

 

3d卷積

輸入層:Win*Hin*Din*Cin  (N個)

超參數:

過濾器個數(輸出通道數):Cout

卷積核維度:w*h*d

參數量:(w*h*d+1)*Cout

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM