Keras中CNN参数数量不符:如何获取正确的7个参数?
解决Keras中Conv1D参数数量不符的问题
咱们先把参数计算的逻辑掰明白,你说的7个参数是完全正确的:1个尺寸为2的卷积核对应3个输入通道,光权重就有2×3=6个,再加上1个偏置项,正好是7个参数。
你现在只得到5个参数,大概率是输入通道数设置错了——比如你可能把输入的通道数设成了2,那参数就变成(2×2 +1)=5个,正好对应你看到的结果。
下面给你正确的代码示例,保证能得到7个参数:
from tensorflow.keras.models import Model from tensorflow.keras.layers import Input, Conv1D # 输入形状格式是(时间步长, 输入通道数),这里时间步长设为None(支持任意长度),输入通道数设为3对应你的3个输入 input_layer = Input(shape=(None, 3)) # 配置Conv1D层:1个输出通道(对应1个卷积核)、核尺寸2、无填充(valid)、Sigmoid激活、保留偏置 conv_layer = Conv1D( filters=1, kernel_size=2, padding='valid', activation='sigmoid', use_bias=True )(input_layer) model = Model(inputs=input_layer, outputs=conv_layer) model.summary()
运行这段代码后,你会在model.summary()里看到Conv1D层的参数数量是7,完全符合你的预期。
再给你排查几个可能的错误点:
- 如果你之前的输入写成了
Input(shape=(None, 2)),输入通道数变成2,参数就会是5,这是最常见的问题 - 要是不小心把
use_bias设成了False,参数会变成6,也不符合你的要求,但你得到的是5,所以这个可能性比较低 - 别把
filters设成大于1的值,不然参数会成倍增加,也不符合你的设定
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

