使用Conv1D构建信号数据CNN模型时如何确定正确的input_shape参数
Conv1D输入参数input_shape取值说明
Keras中Conv1D层的input_shape仅需要描述单条样本的维度信息,不需要包含训练集总样本数这个批量维度,标准格式为(序列长度, 单时间步特征数)。
结合你的数据集的取值方案
你已明确每条样本的序列长度为64,根据信号数据的通道数不同,对应两种常见取值:
- 如果你使用的是单通道信号(每个时间步仅对应1个信号数值,整条样本为长度64的一维序列):
input_shape取值为(64, 1) - 如果你使用的是多通道信号(每个时间步对应N个不同的特征,比如多传感器同步采集的信号):
input_shape取值为(64, N),N替换为实际的特征数即可
你当前代码的问题修正
你当前代码里把len(x_train)也就是训练集总样本数49572写入了input_shape,这个是错误的,样本总数属于训练时的批量维度,不需要写入层的输入参数。
单通道信号场景下修正后的模型代码如下:
model = tf.keras.models.Sequential([ tf.keras.layers.Conv1D(32, 3, activation='relu', input_shape=(64,1)), tf.keras.layers.MaxPooling1D(3), tf.keras.layers.Conv1D(64, 3, activation='relu'), tf.keras.layers.MaxPooling1D(3), tf.keras.layers.Conv1D(128, 3, activation='relu'), tf.keras.layers.MaxPooling1D(3), tf.keras.layers.Conv1D(128, 3, activation='relu'), tf.keras.layers.MaxPooling1D(3), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(29, activation='softmax') ])
注意数据预处理阶段需要给训练集增加最后一个特征维度,如果你当前x_train的形状为(49572, 64),可以通过以下代码转换为匹配输入要求的形状:
x_train = np.expand_dims(x_train, axis=-1)
内容的提问来源于stack exchange,提问作者Kgs. M. Rusdiansyah Muharrom
相关产品推荐
相关产品推荐

