• 问题反馈可发送邮件到stubbornhuang@qq.com

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

Pytorch – torch.nn.Conv1d参数详解与使用

Pytorch 发布于2022-06-28 阅读 13,263次 0次评论 1次点赞 本文共1827个字,阅读需要5分钟。

1 torch.nn.Conv1d

torch.nn.Conv1d主要是对一维输入Tensor应用一维卷积。

如果一维卷积输入为(N,C_{in},L),输出为(N,C_{out},L_{out}),那么这两者的关系可描述为

\operatorname{out}\left(N_{i}, C_{\text {out }_{j}}\right)=\operatorname{bias}\left(C_{\text {out }_{j}}\right)+\sum_{k=0}^{C_{i n}-1} \text { weight }\left(C_{\text {out }_{j}}, k\right) \star \operatorname{input}\left(N_{i}, k\right)

其中\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}可通过以下公式计算

L_{\text {out }}=\left\lfloor\frac{L_{\text {in }}+2 \times \text { padding }-\text { dilation } \times(\text { kernelsize }-1)-1}{\text { stride }}+1\right\rfloor

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,而

\begin{aligned}
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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
Pytorch - 使用torchsummary/torchsummaryX/torchinfo库打印模型结构、输出维度和参数信息
Pytorch
下一篇
深度学习 - 图解Transformer,小白也能看懂的Transformer处理过程
Transformer
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号