关于TensorFlow Sequential模型Conv2D层参数计算的疑问
Conv2D层参数计算疑问解答
我无法理解自己构建的tf.keras.Sequential模型的summary输出。例如summary的前两行:
Layer (type) Output Shape Param # zero_padding2d (ZeroPadding2D) (None, 70, 70, 3) 0 conv2d (Conv2D) (None, 64, 64, 32) 4736 我不明白为何Conv2D层的参数是4736?64 * 64 * 32 的结果并不等于4736。我的模型代码如下:
tf.keras.Sequential([ tf.keras.Input(shape=(64 , 64 ,3)), ## ZeroPadding2D with padding 3, input shape of 64 x 64 x 3 tf.keras.layers.ZeroPadding2D(padding=3), ## Conv2D with 32 7x7 filters and stride of 1 tf.keras.layers.Conv2D( filters = 32, kernel_size = 7, strides = (1,1) ), ## BatchNormalization for axis 3 tf.keras.layers.BatchNormalization( axis=3 ), ## ReLU tf.keras.layers.ReLU(), ## Max Pooling 2D with default parameters tf.keras.layers.MaxPooling2D(), ## Flatten layer tf.keras.layers.Flatten(), ## Dense layer with 1 unit for output & 'sigmoid' activation tf.keras.layers.Dense(1, activation='sigmoid') ])
参数计算逻辑说明
你混淆了输出特征图元素总数和可训练参数数量的概念:
Conv2D的可训练参数只和卷积核本身的配置有关,和输出特征图的尺寸(64×64)无关,具体计算方式如下:
- 单个7×7卷积核的参数:
卷积核宽 × 卷积核高 × 输入通道数= 7×7×3 = 147 - 32个卷积核的总权重参数:147 × 32 = 4704
- 每个卷积核对应1个偏置项,32个卷积核共32个偏置参数
- 总参数 = 4704 + 32 = 4736
而你用的64×64×32是该层输出特征图的所有元素个数,这是模型前向传播时生成的数据量,不是需要训练的参数数量,两者完全是不同的概念。
内容的提问来源于stack exchange,提问作者kirsanv43
相关产品推荐
相关产品推荐

