Keras Sequential模型input_shape参数配置相关问题咨询
问题1:两种input_shape运行结果不一致的原因
这两种写法定义的输入维度、层计算逻辑完全不同,结果自然会有差异:
input_shape=(167,)表示单条样本是长度为167的一维向量,对应批量输入的形状为(批量大小, 167),和你现有x_train.shape=(97,167)完全匹配。此时第一层Dense(65)的输出形状为(批量大小, 65),后续Dense(1)输出形状为(批量大小, 1),符合回归任务的输出要求。input_shape=(167,1)表示单条样本是形状为167×1的二维张量,对应批量输入的形状应为(批量大小, 167, 1),和你现有训练集形状不匹配。Dense层默认作用在输入的最后一个维度,此时第一层Dense(65)的输出形状会变成(批量大小, 167, 65),后续Dense(1)输出为(批量大小, 167, 1),和回归任务需要的(批量大小, 1)输出形状不符,计算损失时要么触发隐式广播产生错误的计算结果,要么直接报错,和第一种写法的计算逻辑完全不同,结果肯定不一致。
问题3:input_shape的正确确定方法
input_shape的取值规则非常明确:填写单条样本的形状,不需要包含批量维度。
你可以直接取训练集shape从第二位开始的所有维度:
- 你的训练集
x_train.shape=(样本数, 特征数),单条样本形状就是(特征数,),所以input_shape=(x_train.shape[1],)是正确写法。 - 如果后续处理其他任务:比如输入是28×28的灰度图片,训练集形状是
(样本数,28,28,1),那input_shape就是(28,28,1);如果是长度为100的时序特征,训练集形状是(样本数,100,12),input_shape就是(100,12)。
如果确实需要用二维输入(167,1),需要先给训练集扩充维度:x_train = np.expand_dims(x_train, axis=-1),把训练集形状调整为(97,167,1)再传入模型。
内容的提问来源于stack exchange,提问作者user17395789
相关产品推荐
相关产品推荐

