Conv1d 一维卷积图解

在深度学习中,卷积层是许多深度神经网络的主要构建块。该设计的灵感来自视觉皮层,其中单个神经元对视野的受限区域(称为感受野)做出反应。这些区域的集合重叠以覆盖整个可见区域。

虽然卷积层最初应用于计算机视觉,但其平移不变特性使卷积层可以应用于自然语言处理、时间序列、推荐系统和信号处理。

理解卷积的最简单方法是将其视为应用于矩阵的滑动窗口函数。本文将了解一维卷积的工作原理并探讨每个参数的影响。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

1、卷积是如何工作的?(核大小 = 1)

卷积(convolution)是一种线性运算,涉及将权重与输入相乘并产生输出。乘法是在输入数据数组和权重数组 — 称为核(kernel)—之间执行的。在输入和核之间应用的运算是元素点积的总和。每个运算的结果都是一个值。

让我们从最简单的示例开始,当你拥有 1D 数据时使用 1D 卷积。对 1D 数组应用卷积会将核中的值与输入向量中的每个值相乘。

假设核中的值(也称为“权重”)为“2”,我们将输入向量中的每个元素逐个乘以 2,直到输入向量的末尾,并得到输出向量。输出向量的大小与输入的大小相同。

首先,我们将 1 乘以权重 2,得到第一个元素的值为“2”。然后我们将核移动 1 步,将 2 乘以权重 2,得到“4”。我们重复此操作直到最后一个元素 6,然后将 6 乘以权重,得到“12”。此过程生成输出向量。

class TestConv1d(nn.Module):
    def __init__(self):
        super(TestConv1d, self).__init__()
        self.conv = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=1, bias=False)
        self.init_weights()

    def forward(self, x):
        return self.conv(x)
    
    def init_weights(self):
        self.conv.weight[0,0,0] = 2.


in_x = torch.tensor([[[1,2,3,4,5,6]]]).float()
print("in_x.shape", in_x.shape)
print(in_x)

net = TestConv1d()
out_y = net(in_x)

print("out_y.shape", out_y.shape)
print(out_y)

输入如下:

in_x.shape torch.Size([1, 1, 6])  
tensor([[[1., 2., 3., 4., 5., 6.]]])  
out_y.shape torch.Size([1, 1, 6])  
tensor([[[ 2.,  4.,  6.,  8., 10., 12.]]], grad_fn=<SqueezeBackward1>)

2、核大小的影响(核大小 = 2)

不同大小的核将检测输入中不同大小的特征,进而产生不同大小的特征图(feature map)。让我们看另一个示例,其中核大小为 1x2,权重为“2”。像以前一样,我们将核滑过输入向量的每个元素。我们通过将每个

### Conv1D 一维卷积神经网络图解一维卷积神经网络(Conv1D)中,输入通常是时间序列数据或其他形式的一维信号。与二维卷积不同的是,一维卷积只在一个方向上滑动滤波器来捕捉局部模式。 #### 输入形状 对于一维卷积来说,常见的输入张量形状为 `(batch_size, sequence_length, input_channels)` 或者在某些框架中也可以是 `(sequence_length, batch_size, input_channels)` 取决于具体实现方式[^1]。 #### 卷积过程 假设有一个长度为 `L` 的向量作为输入,并且应用了一个宽度为 `k` 的过滤器,则该过滤器会在整个输入序列上移动并计算加权和加上偏置项得到新的特征映射。每次移动的距离由步幅(`stride`)决定,默认情况下等于1,在这种设置下输出尺寸可以通过下面公式计算: \[ \text{output\_length} = (\text{input\_length}-\text{filter\_width})/\text{stride}+1 \] 当设置了填充(padding),则可以在不影响原始信息的情况下扩展边界以保持输出大小不变或接近原大小。 #### 图形解释 为了更好地理解这个概念,可以想象一条线代表输入的时间序列数据点,而一个小窗口沿着这条线上下滑过每一个位置执行乘积累加运算生成一个新的数值加入到最终的结果集中形成一个更短的新序列。每个这样的小窗口就相当于一个可训练的一维卷积核。 ```plaintext Input Sequence (Length L): [x0,x1,...,xi,...,x(L-1)] Filter/Kernel : [w0,w1,...wk] Stride : s Padding : p Output Sequence : [y0,y1,...ym] where m=(L-k+p*2)/s+1 ``` 在这个过程中,通过调整不同的超参数如内核大小、步长以及是否使用零填充等选项能够控制模型学习不同类型的空间关系特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值