You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输入形状明确固定时model.summary()输出形状含None的原因是什么?

Keras模型输出形状差异说明

核心原因

本质是TensorFlow Keras的层形状推断规则,差异来自你有没有在构建模型时显式声明输入形状:

  • 第一段代码没给第一层指定输入形状,模型直到第一次收到训练数据才会推断形状,直接用了第一次接收到的批次大小固定了维度
  • 第二段代码在Flatten层提前指定了输入形状,构建阶段就保留了批次维度的通用性,用None表示可适配任意批次大小

第一段代码输出(32, 10)的原因

你写的第一个模型,第一层直接用了没加input_shape参数的Dense层,这时候Keras根本不知道你要喂什么形状的数据,不会提前做形状推断。
等你调用model.fit()训练的时候,Keras默认批次大小是32,第一批送进去的训练数据形状正好是(32, 784),模型这时候才临时推断形状,直接把输入的第一维(批次维度)固定成了第一次拿到的32,所以后面所有层的输出形状第一维都显示为32。

注意:这种模型是有使用限制的,之后你传的所有数据批次大小必须是32,不然会报形状不匹配的错,没法用其他批次大小跑推理或者训练。

第二段代码输出(None, 10)的原因

第二个模型你在第一层Flatten就指定了input_shape=(28, 28),这个参数只定义了单张样本的形状,Keras会自动把批次维度留成可变的,用None表示这个位置可以是任意正整数。
这种模型是通用的,不管你传批次大小是1、32、64还是其他任何值的输入都能正常处理,所以输出形状的第一维就显示为通用的None。


内容的提问来源于stack exchange,提问作者JJJohn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:12:01