【发布时间】:2022-03-17 01:14:43
【问题描述】:
我正在尝试使用 keras 对时间序列分类问题实现一维卷积。我在解释一维卷积层的输出大小时遇到了一些麻烦。
我的数据由 128 个单位的时间间隔内的不同特征的时间序列组成,我应用了一维卷积层:
x = Input((n_timesteps, n_features))
cnn1_1 = Conv1D(filters = 100, kernel_size= 10, activation='relu')(x)
编译后我得到以下输出形状:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_26 (InputLayer) (None, 128, 9) 0
_________________________________________________________________
conv1d_28 (Conv1D) (None, 119, 100) 9100
我假设使用一维卷积,数据仅在时间轴(轴 1)上进行卷积,我的输出大小为: 119、100*9。但我猜想网络正在跨特征维度(轴 2)执行某种操作,我不知道执行的是哪个操作。 我之所以这么说是因为我将其解释为 1d 卷积是必须保留特征形状,因为我只对时域进行卷积:如果我有 9 个特征,那么对于每个过滤器我有 9 个卷积核,每个都应用于不同的特征并在时间轴上复杂。这应该为每个过滤器返回 9 个卷积特征,从而产生 119、9*100 的输出形状。 但是输出形状是 119, 100。
显然发生了其他事情,我无法理解或理解。
我的推理失败在哪里?一维卷积是如何进行的?
我再添加一条评论,这是我对提供的答案之一的评论:
我了解从 128 减少到 119,但我不明白的是为什么特征维度会发生变化。例如,如果我使用
Conv1D(filters = 1, kernel_size= 10, activation='relu')
,那么输出维度将是 (None, 119, 1),卷积后只产生一个特征。这个维度是怎么回事,从 9 --> 1 执行哪个操作?
【问题讨论】:
标签: python keras deep-learning conv-neural-network