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

Jupyter Notebook中调用model.summary()报Undefined shapes are not supported错误求助

解决方案:Sequential模型调用model.summary()报Undefined shapes错误

核心原因

Keras 3.x中,Sequential模型如果无法自动推断各层的输入/输出形状,调用model.summary()就会触发该错误。Jupyter Notebook环境的默认配置和Colab存在差异,导致Colab能自动处理的形状推断在本地Notebook中失效。

具体解决方法

1. 显式指定模型输入形状

这是最直接的解决方案,在模型第一层明确input_shape参数,或者添加Input层作为起始层:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Input

# 方式一:在第一层设置input_shape
model = Sequential([
    Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    Dense(10, activation='softmax')
])

# 方式二:用Input层定义输入形状
model = Sequential([
    Input(shape=(28,28,1)),
    Conv2D(32, (3,3), activation='relu'),
    Dense(10, activation='softmax')
])
model.summary()  # 此时可正常执行

2. 修复动态形状层的形状推断

如果模型中包含Lambda、自定义层等无法自动推断输出形状的组件,需要显式指定output_shape:

from tensorflow.keras.layers import Lambda
import tensorflow as tf

model = Sequential([
    Input(shape=(28,28)),
    # 明确Lambda层的输出形状
    Lambda(lambda x: tf.expand_dims(x, axis=-1), output_shape=(28,28,1)),
    Conv2D(32, (3,3), activation='relu')
])

3. 手动触发形状推断

如果不想提前指定输入形状,可以先给模型喂入一个符合格式的dummy样本,让模型自动推断各层形状后再调用summary:

import numpy as np

model = Sequential([
    Conv2D(32, (3,3), activation='relu'),
    Dense(10, activation='softmax')
])

# 喂入一个批量为1的dummy输入
dummy_input = np.random.rand(1, 28, 28, 1)
model(dummy_input)

# 此时可正常生成summary
model.summary()

4. 环境兼容性调整

Python 3.12属于较新版本,TensorFlow 2.17对其的适配可能存在局部问题,可尝试:

  • 降级Python到3.11版本,这是当前深度学习生态兼容性更好的版本
  • 验证Jupyter Notebook的内核是否绑定了正确的虚拟环境(在Notebook中执行!python --version和!pip list确认版本匹配)

关于Colab训练慢的补充

Colab默认可能使用CPU运行,可通过以下步骤切换到加速硬件:

  1. 点击顶部菜单栏的Runtime -> Change runtime type
  2. 在Hardware accelerator下拉菜单中选择GPU或TPU,保存后重新运行代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:49:59