本文是一个深度学习框架pytorch的API : torch.nn.Conv2d )函数的用法。 本博客介绍了torch.nn.Conv2d )中每个参数的含义和用法,并学会了使用pytorch创建卷积神经网络。
参考:官方文档和其他博客
一、用法conv2din_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1, bias padding _ mode=‘zeros’2、参数in_channels :输入通道数【必需】out_channels :输出通道数【必需】kernel_size :叠加默认值为1。 【选项】填充:将所有边界的增量设置为0时的边距大小。 例如,padding=1时,如果原始大小为3 3,则之后的大小为5 5。 也就是说,在外周增加了一圈0。 【选项】dilation 控制卷积内核之间的间隔)? 请参阅示例】如果设置【选项】dilation=0,效果如图所示。 输入蓝色、输出绿色、卷积核为3 3 ) ) ) ) ) )。
如果设置dilation=1,则效果如图所示。 蓝色输入,绿色输出,卷积核保持3 3。 )
但是,在这里,将卷积核点和输入之间的距离乘以1的值来得到输出。
groups :控制输入和输出之间的连接。 不常用)【选择项】为例:
例如,如果groups为1,则所有输入都连接到所有输出
groups为2时,意味着将输入分成两组,两层并排放置,每层可以看到一半的输入通道,生成一半的输出通道,两者串联连接。 这也是参数字面的意思。 是“小组”的意思。
必须注意的是,in_channels和out_channels都必须被整除为groups。 否则会报告错误。 因为必须分成这么多小组。 让别人编程怎么办? )
bias :是否将学习到的bias添加到输出中,默认值为True。 【选项】padding_mode :字符串类型。 收到的字符串只有“zeros”和“circular”。 【选项】注意:参数kernel_size、stride、padding和dilation可以是整数或元组。 一个值表示同时作用于http://www.Sina.com/2两个维,两个值元组分别作用于3358wwww
三.相关形状假设输入形状如下。
n,C in,h,w ) ) n,C_{\text{in}},h,w ) )。
输出形状如下所示。
n,C out,H out,W out ) ) n,C_{\text{out}},H_{\text{out}},W_{\text{out}} ),n,C out,out
其中H o
u t H_{out} Hout 为:
H o u t = ⌊ H i n + 2 × padding [ 0 ] − dilation [ 0 ] × kernel_size [ 0 ] − 1 ) − 1 stride [ 0 ] + 1 ⌋ H_{out} = \left\lfloor\frac{H_{in} + 2 \times \text{padding}[0] – \text{dilation}[0] \times \text{kernel\_size}[0] – 1) – 1}{\text{stride}[0]} + 1\right\rfloor Hout=⌊stride[0]Hin+2×padding[0]−dilation[0]×kernel_size[0]−1)−1+1⌋
W o u t W_{out} Wout 为:
W o u t = ⌊ W i n + 2 × padding [ 1 ] − dilation [ 1 ] × kernel_size [ 1 ] − 1 ) − 1 stride [ 1 ] + 1 ⌋ W_{out} = \left\lfloor\frac{W_{in} + 2 \times \text{padding}[1] – \text{dilation}[1] \times \text{kernel\_size}[1] – 1) – 1}{\text{stride}[1]} + 1\right\rfloor Wout=⌊stride[1]Win+2×padding[1]−dilation[1]×kernel_size[1]−1)−1+1⌋
四、示例
入门学习者请不要过度关注某一些细节,建立一个简单的卷积层使用这个 API 其实很简单,大部分参数保持默认值就好,下面是简单的一个示例,创建一个简单的卷积神经网络:
class CNNnn.Module): def __init__self,in_channels:int,out_channels:int): “”” 创建一个卷积神经网络 网络只有两层 :param in_channels: 输入通道数量 :param out_channels: 输出通道数量 “”” superCNN).__init__) self.conv1=nn.Conv2din_channels,10,3,stride=1,padding=1) self.pool1=nn.MaxPool2dkernel_size=2,stride=1) self.conv2=nn.Conv2d10,out_channels,3,stride=1,padding=1) self.pool2=nn.MaxPool2dkernel_size=2,stride=1) def forwardself,x): “”” 前向传播函数 :param x: 输入,tensor 类型 :return: 返回结果 “”” out=self.conv1x) out=self.pool1out) out=self.conv2out) out=self.pool2out) return out