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