如何获取TensorFlow Keras模型中所有层的形状/尺寸信息?
获取Keras模型层的形状/维度信息
有几种实用方法可以获取模型各层的参数或输出形状信息:
1. 直接访问层的参数属性
对于带可训练参数的层(如Conv2D、Dense),可以直接读取kernel属性获取卷积核/权重矩阵的形状,同时可查看bias属性获取偏置形状:
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense # 先实例化模型 model = create_model() # 遍历所有层 for layer in model.layers: # 输出带核参数的层的形状 if hasattr(layer, 'kernel'): print(f"层名称: {layer.name}, 核参数形状: {layer.kernel.shape}") # 输出偏置形状(若层使用偏置) if layer.use_bias: print(f"层{layer.name}的偏置形状: {layer.bias.shape}")
运行后会得到类似输出:
层名称: conv2d_1, 核参数形状: (5, 5, 1, 64)
层conv2d_1的偏置形状: (64,)
层名称: conv2d_2, 核参数形状: (5, 5, 64, 32)
层conv2d_2的偏置形状: (32,)
层名称: dense_1, 核参数形状: (512, 120)
层dense_1的偏置形状: (120,)
层名称: dense_2, 核参数形状: (120, 10)
层dense_2的偏置形状: (10,)
注:TensorFlow中Conv2D的核形状为(核高, 核宽, 输入通道数, 输出通道数),和你描述的(64,1,5,5)只是维度顺序不同,实际含义一致——对应64个5×5的1通道卷积核。
2. 用model.summary()查看输出形状
如果需要获取每层的输出张量形状,直接调用summary()即可生成清晰的表格:
model.summary()
输出示例:
Layer (type) Output Shape Param #conv2d_1 (Conv2D) (None, 24, 24, 64) 1664
max_pooling2d (MaxPooling2D) (None, 12, 12, 64) 0
conv2d_2 (Conv2D) (None, 8, 8, 32) 51232
max_pooling2d_1 (MaxPooling2 (None, 4, 4, 32) 0
flatten (Flatten) (None, 512) 0
dense_1 (Dense) (None, 120) 61560
dense_2 (Dense) (None, 10) 1210Total params: 115,666
Trainable params: 115,666
Non-trainable params: 0
3. 查看层的配置信息
若需要层的完整配置细节(如卷积核大小、通道数等),可使用get_config():
for layer in model.layers: if isinstance(layer, (tf.keras.layers.Conv2D, tf.keras.layers.Dense)): config = layer.get_config() print(f"\n层{layer.name}核心配置:") if isinstance(layer, tf.keras.layers.Conv2D): print(f" 输出通道数: {config['filters']}") print(f" 卷积核尺寸: {config['kernel_size']}") else: print(f" 输出单元数: {config['units']}") print(f" 输入特征数: {layer.input_shape[-1]}")
内容的提问来源于stack exchange,提问作者CA Khan
相关产品推荐
相关产品推荐

