您好,欢迎来到微智科技网。
搜索
您的当前位置:首页【pytorch】nn.conv1d的使用

【pytorch】nn.conv1d的使用

来源:微智科技网

官方文档在。

conv1d具体不做介绍了,本篇只做pytorch的API使用介绍.

计算公式

输入张量的Shape一般为 ( N , C i n , L ) (N,C_{in}, L) (N,Cin,L),其中N为batch_size,一般也可用B代替;
C i n C_{in} Cin输入张量倒数第二维,表示Channel的数量;
L是输入信号序列的长度;

输出张量的shape一般为 ( N , C o u t , L o u t ) (N,C_{out},L_{out}) (N,Cout,Lout), 下一节会介绍怎么计算来的。

公式截图如下,

运算过程

假设输入的序列为 [1,5,7,3,2,1,6,9], 卷积核为[2,4,6,1,3]

那么对应nn.conv1d初始化就是 in_channel=1, out_channel=1, stride=1, padding=0

计算过程中,每计算一次(kernel_size),移动一步(stride),
这个过程就是上图公式中的 w e i g h t ( C o u t , k ) ∗ i n p u t ( N i , k ) weight(C_{out},k) * input(N_i,k) weight(Cout,k)input(Ni,k),其中k是out_channel的,
如果out_channel个数大于1,则这样的过程会有多次。

入参

  • in_channels
    Number of channels in the input image
    输入的Channel数,对应的是输入数据的倒数第二维
  • out_channels
    Number of channels produced by the convolution
    输出的Channel数,对应输出数据的倒数第二维度
  • kernel_size
    Size of the convolving kernel
    即卷积核长度
    它可以是一个数字也可以是一个tuple(但是conv1d下,tuple是否有意义?
  • stride
    Stride of the convolution. Default: 1
    卷积核步长
  • padding
    Padding added to both sides of the input. Default: 0
  • padding_mode
    ‘zeros’, ‘reflect’, ‘replicate’ or ‘circular’. Default: ‘zeros’
  • dilation
    Spacing between kernel elements. Default: 1
  • groups
    Number of blocked connections from input channels to output channels. Default: 1
  • bias
    If True, adds a learnable bias to the output. Default: True
    是否需要bias

输出结果的shape计算

代码举例

1

net = nn.Conv1d(in_channels=1, out_channels=8, kernel_size=4, stride=1, bias=False)
x = torch.linspace(1,10,10).view(1,1,10)

y = net(x)
print(y.shape)

计算结果

torch.Size([1, 8, 7])

2. 修改stride

net = nn.Conv1d(in_channels=1, out_channels=8, kernel_size=4, stride=2, bias=False)
x = torch.linspace(1,10,10).view(1,1,10)

y = net(x)
print(y.shape)

计算结果

torch.Size([1, 8, 4])

3 添加padding

net = nn.Conv1d(in_channels=1, out_channels=8, kernel_size=4, stride=1, padding=1, padding_mode='zeros',bias=False)
x = torch.linspace(1,10,10).view(1,1,10)

y = net(x)
print(y.shape)

计算结果

torch.Size([1, 8, 5])

4 修改dilation

net = nn.Conv1d(in_channels=1, out_channels=8, kernel_size=4, stride=2, dilation=2,bias=False)
x = torch.linspace(1,10,10).view(1,1,10)

y = net(x)
print(y.shape)

计算结果

torch.Size([1, 8, 2])

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务