1 torch.nn.Conv1d
torch.nn.Conv1d主要是对一维输入Tensor应用一维卷积。
如果一维卷积输入为(N,C_{in},L),输出为(N,C_{out},L_{out}),那么这两者的关系可描述为
其中\star为cross-correlation算子,N为batch size,C为输入通道数,L为输入序列的长度。
1.1 torch.nn.Conv1d
形式
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
参数
- in_channels(int):输入的特征维度
- out_channels(int):输出的特征维度
- kernel_size(int或者tuple):卷积核的大小
- stride(int或者tuple):默认值为1,卷积的步幅
- padding(int或者tuple):默认值为0,添加到输入两侧的零填充数量
- padding_mode(字符串):默认值为"zeros",可选值为"zeros"、"reflect"、"replicate"、“circular”
- dilation(int或者tuple):内核元素之间的间距
- groups(int):默认值为1,从输入通道到输出通道的阻塞连接数
- bias(bool):默认值为True,如果为True,则向输出添加可学习的偏差。
可以通过这个链接https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md查看stride、padding、dilation等参数对卷积过程的影响。
输入与输出维度
一般,输入输出具有以下维度
- Input:(N,C_{in},L_{in})
- Output:(N,C_{out},L_{out})
其中,L_{out}可通过以下公式计算
1.2 torch.nn.Conv1d的简单使用
假设有batch_size为8,input_channels 特征维度为16,长度为50的输入序列,然后使用卷积核大小为3,卷积步幅为2,padding为0的一维卷积层对该输入序列进行一维卷积。
从1.1节中我们知道,torch.nn.Conv1d的输入输出的维度为:
- Input:(N,C_{in},L_{in})
- Output:(N,C_{out},L_{out})
那么按照上述描述,N为batch size的大小即为8,C_{out}被指定为33,而
L_{out} & = \left \lfloor \frac{50 + 2 \times 0 - 1 \times (2 - 1) -1 }{2} + 1 \right \rfloor \\
L_{out} & = \left \lfloor 24.5 \right \rfloor \\
L_{out} & = 24
\end{aligned}
从而得出Output的输出维度为(8,33,24)
pytorch代码实现如下:
import torch
if __name__ == '__main__':
input = torch.randn(8, 16, 50)
conv1d = torch.nn.Conv1d(16, 33, 3, stride=2)
output = conv1d(input)
print(output.shape)
输出
torch.Size([8, 33, 24])
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Pytorch – torch.nn.Conv1d参数详解与使用
原文链接:https://www.stubbornhuang.com/2185/
发布于:2022年06月28日 16:25:31
修改于:2023年06月25日 21:02:51
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50