卷積的模塊在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(
intortuple) - 卷積核的尺寸 - stride(
intortuple,optional) - 卷積步長 - padding (
intortuple,optional)- 輸入的每一條邊補充0的層數 - dilation(
intortuple, `optional``) – 卷積核元素之間的間距 - groups(
int,optional) – 從輸入通道到輸出通道的阻塞連接數 - bias(
bool,optional) - 如果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
