我将尝试解释一维卷积是如何应用于序列数据的。我用一个由词组成的句子的例子,但显然不是这样
特定于文本数据,与其他序列数据相同时间序列。假设我们有一个由“m”字组成的句子,其中每个词都是
使用单词嵌入表示:
现在我们要应用一个由n个不同的此数据的内核大小为“k”的筛选器。为此,滑动窗户从数据中提取长度“k”,然后对每个值应用每个过滤器提取的窗口。这是一个发生了什么的例子(在这里我假设“k=3”,并删除了
如上图所示,每个过滤器的响应是等效的对其卷积的结果(即按元素进行乘法,然后
对所有结果求和)与长度为’k’(即’i’-th)的提取窗口(i+k-1)个单词。此外,请注意每个过滤器
具有与功能数量相同的频道数量(即word-(因此执行卷积运算,
i、 元素级乘法是可能的)。基本上,每个过滤器
在局部图像中检测模式的特定特征的存在**训练数据窗口是否窗口)。在所有的窗口应用了所有过滤器之后
length
k我们会得到这样的输出,它是
卷积
如您所见,图中有’m-k+1’窗口,因为我们假设
padding=’valid’‘和’stride=1’(默认行为
Conv1D层(以Keras为单位)。这个
stride参数决定窗口滑动(即移位)到多少
提取下一个窗口(例如,在上面的示例中,步幅为2
提取单词窗口:
(1,2,3),(3,4,5),(5,6,7),…instead)。这个
padding参数决定窗口是否完全由训练样本中的单词或在开头和结尾处应有填充最后,这样,卷积响应可能具有相同的长度(即。
m而不是’m-k+1’)作为训练样本(例如,在上面的例子中,
padding='same'将提取单词窗口:
(PAD,1,2),(1,2,3),(2,3,4),…,(m-2,m-1,m),(m-1,m,PAD))。您可以使用Keras验证我提到的一些内容:
from keras import modelsfrom keras import layersn = 32 # number of filtersm = 20 # number of words in a sentencek = 3 # kernel size of filtersemb_dim = 100 # embedding dimensionmodel = models.Sequential()model.add(layers.Conv1D(n, k, input_shape=(m, emb_dim)))model.summary()
Model summary:
_________________________________________________________________Layer (type) Output Shape Param # =================================================================conv1d_2 (Conv1D) (None, 18, 32) 9632 =================================================================Total params: 9,632Trainable params: 9,632Non-trainable params: 0_________________________________________________________________
如图所示,卷积层的输出形状为
(m-k+1,n)=(18,32)以及
卷积层等于:
numu filters*(kernelu size*nu features)+每个滤波器一个偏置=n*(k*emb_dim)+n=32*(3*100)+32=9632。



