背景:我是用于对于信号的处理,想用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代表着只进行了从左头到右头的一次移动。
如果上面还没听明白我举个例子就明白了。
#首先是前面的例子: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])
'''
Pytorch之nn.Conv1d学习个人见解_rothschildlhl的博客-CSDN博客_nn.conv1d
卷积大小为:outputchannel×input_channel×卷积核,尤其是上面链接的最后分析两种卷积核的区别,尤其是对于通道的理解。