nn.Conv1d 一维卷积原理及pytorch应用

背景:我是用于对于信号的处理,想用pytorch这个API,网上资源参差不齐,而且都是按照自然语言处理(nlp)知识来讲的,不过也有讲的很明白的,这里简单说一下为了方便可视化。

一维卷积:

并不是指的像信号那样的一维卷积,而是一个X*K的矩阵,K就是你的卷积核的大小,X直接就是你的数据高度了。

下面这张图,这张图都在讲解其实有点误导人,不细看是容易理解偏的,因为原作者把最后两个维度换位置了。

我们只看最左边的和中间最上面的图。input:7×5。卷积核假如我们设置为4,则为4*7。这个时候你就想你把他们都转置过来。即【batch hight weight】=[1,5,7]。卷积核也就变成了7*4。从左往右做卷积。如果不补零,那么就只能卷积核移动四次,于是就变成了【batch,1,4】,1代表着只进行了从左头到右头的一次移动。

nn.Conv1d 一维卷积原理及pytorch应用_第1张图片

如果上面还没听明白我举个例子就明白了。

#首先是前面的例子:5*7矩阵沿着宽度卷积 卷积核为X*4,X=height,即x=5,outchannel:代表卷1次
from torch import nn
conv1 = nn.Conv1d(in_channels=5,out_channels=1,kernel_size=4,padding=0)
input = torch.randn(200,5,7)
out = conv1(input)
print(out.size())

'''
out:
torch.Size([200, 1, 4])
'''

#outchannel=2,他就会在高度上堆叠
conv1 = nn.Conv1d(in_channels=5,out_channels=2,kernel_size=4,padding=0)
input = torch.randn(200,5,7)
out = conv1(input)
print(out.size())

'''
out:
torch.Size([200, 2, 4])
'''

torch.nn.Conv1d及一维卷积详解_FY_2018的博客-CSDN博客_conv1d维度近日在搞wavenet,期间遇到了一维卷积,在这里对一维卷积以及其pytorch中的API进行总结,方便下次使用之前对二维卷积是比较熟悉的,在初次接触一维卷积的时候,我以为是一个一维的卷积核在一条线上做卷积,但是这种理解是错的,一维卷积不代表卷积核只有一维,也不代表被卷积的feature也是一维。一维的意思是说卷积的方向是一维的。下边首先看一个简单的一维卷积的例子(batchsize是1,也只有一个kernel):输入:一个长度为35的序列,序列中的每个元素有256维特征,故输入可以看作(3https://blog.csdn.net/fy_2018/article/details/119489764要是还不懂就看看这个链接讲的十分明白。

Pytorch之nn.Conv1d学习个人见解_rothschildlhl的博客-CSDN博客_nn.conv1d

卷积大小为:outputchannel×input_channel×卷积核,尤其是上面链接的最后分析两种卷积核的区别,尤其是对于通道的理解。

你可能感兴趣的:(tips,机器学习基础,pytorch)