Google Colab下Keras函数式API创建模型调用summary无层显示问题
问题原因
该问题基本都是由Google Colab环境中的Keras/TensorFlow导入冲突、版本不匹配导致的:
- Colab默认同时预装了独立Keras包和TensorFlow内置的tf.keras模块,如果你构建模型时混用了两个来源的API(比如Input、Dense从独立keras.layers导入,Model从tf.keras.models导入),就会出现层信息无法被Model正确追踪的问题。但底层计算图依然能正常生成,所以训练、推理不受影响。
- 部分Colab默认搭载的TensorFlow小版本存在函数式API层追踪的已知bug,也会触发该问题。
解决方案
1. 统一API导入来源(优先尝试,可解决90%以上的同类问题)
所有模型相关的API统一从tf.keras路径导入,不要混合使用独立keras包的导入:
import tensorflow as tf # 所有层、模型类都从tensorflow.keras下导入 from tensorflow.keras import Input from tensorflow.keras.layers import Dense from tensorflow.keras.models import Model # 构建模型代码保持不变 input = Input(shape = (20,)) x = Dense(30, name = 'dense1')(input) x = Dense(20, name = 'dense2')(x) output = Dense(1)(x) model = Model(inputs = input ,outputs = output) model.compile(loss = 'mse', optimizer = 'adam')
执行后再调用model.layers或model.summary()就能正常显示层信息。
2. 固定版本安装
如果统一导入后仍有问题,重置Colab运行时后先执行版本匹配的安装命令,再运行代码:
!pip uninstall -y keras tensorflow !pip install tensorflow==2.15.0 keras==2.15.0
安装完成后重启Colab运行时即可。
3. 临时触发方案
如果不想改动导入逻辑,可以手动给模型喂一个dummy输入触发计算图完全构建,再查看层信息:
import numpy as np # 输入形状和你定义的Input形状一致即可 dummy_input = np.random.random((1, 20)) _ = model(dummy_input) # 此时再调用就能正常输出 print(model.layers) model.summary()
内容的提问来源于stack exchange,提问作者Dong Jun
相关产品推荐
相关产品推荐

