如何使用 Keras 将一维输入提供给卷积神经网络(CNN)?

Posted

技术标签:

【中文标题】如何使用 Keras 将一维输入提供给卷积神经网络(CNN)?【英文标题】:How to give the 1D input to Convolutional Neural Network(CNN) using Keras? 【发布时间】:2018-07-29 06:53:56 【问题描述】:

我正在使用 Keras 库解决卷积神经网络 (CNN) 的回归问题。我经历了很多例子,但未能理解一维卷积的输入形状的概念

这是我的数据集,1 个目标变量和 3 个原始信号。

为了可视化,这里显示了 5 段传感器信号,每个段都有自己的含义

我想将分段传感器值作为 1D 卷积层的输入,但问题是分段的长度可变。

这是我的 CNN 架构

我厌倦了构建我的 CNN 模型但很困惑

model = Sequential()
model.add(Conv1D(5, 7, activation='relu',input_shape=input_shape))
model.add(MaxPooling1D(pool_length=4))
model.add(Conv1D(4, 7, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

那么,如何在 Keras 中为 CNN 的 Conv1D 提供输入?或者我应该将固定大小的输入设置为 Conv1D?但是怎么做?

【问题讨论】:

【参考方案1】:

我的理解是 input_shape 应该是 (time_steps, n_features),其中 time_steps 是段的长度(传感器信号的序列),n_features 是通道数(在您的情况下为 3 ,因为您有 3 个不同的传感器)。

因此,网络的输入应该有 3 个维度(批次、步骤、通道),其中批次是不同的细分。

我只使用了固定的 time_steps,如果你真的不能使用相同长度的段,你可以尝试用零填充它们。

在Keras Documentation 上,他们说您可以使用 (None, 3) 作为 3 维向量的可变长度序列的 input_shape,但我从未使用过这种方式。

【讨论】:

以上是关于如何使用 Keras 将一维输入提供给卷积神经网络(CNN)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个图像作为输入提供给卷积神经网络

keras中卷积的两种padding方式

在 Keras 的卷积层上使用 Dropout

如何在 Keras 中建模卷积循环网络 (CRNN)

68一维和三维卷积

如何将密集层转换为 Keras 中的等效卷积层?