Keras中Conv1D层针对非图像数据集的正确input_shape设置问题
问题解答
核心结论
你当前设置的input_shape = (x_train_df.shape[1], 1)(即(28,1))是完全正确的,将样本数2000填入input_shape是对参数含义的误解。
原理说明
- Keras所有层的
input_shape参数均不包含样本批次维度,框架会自动在输入形状的最前面补充一个可变的批次维度(也就是报错信息里的None,对应每次训练传入的batch大小) - Conv1D官方文档给出的示例
(10, 128)是单个样本的形状:代表长度为10的序列,序列的每个位置是128维的向量,对应整个批次的输入形状为(None, 10, 128) - 你的场景中,每个样本是长度为28的一维特征序列,序列每个位置的数值维度为1,因此单个样本的形状就是
(28, 1),对应input_shape设置为(28, 1)即可,模型预期的批次输入形状为(None, 28, 1)
注意事项
你当前的训练数据x_train_df形状为(2000, 28),缺少最后一维的通道维度,部分版本的TensorFlow/Keras会做隐式兼容所以能跑通,更稳妥的做法是提前手动扩充维度:
import numpy as np # 给训练、验证数据补充最后一维通道 x_train = np.expand_dims(x_train_df, axis=-1) x_val = np.expand_dims(x_val_df, axis=-1) # 后续使用扩充后的数据训练 model.fit(x_train, y_train_df, epochs = 2, batch_size = 32, validation_data = (x_val, y_val_df), verbose = 2)
内容的提问来源于stack exchange,提问作者Badal
相关产品推荐
相关产品推荐

