如何计算 CNN 的权重数量?

人工智能 神经网络 卷积神经网络 喀拉斯 过滤器 卷积算术
2021-11-07 07:29:21

考虑到用于将图像分为两类的卷积神经网络,我们如何从理论上计算权重的数量:

  • 输入:100x100 灰度图像。
  • 第 1 层:具有 60 个 7x7 卷积滤波器的卷积层(步幅 = 1,有效填充)。
  • 第 2 层:具有 100 个 5x5 卷积滤波器的卷积层(步幅 = 1,有效填充)。
  • 第 3 层:最大池化层,将第 2 层下采样 4 倍(例如,从 500x500 到 250x250)
  • 第 4 层:具有 250 个单位的密集层
  • 第 5 层:具有 200 个单位的密集层
  • 第 6 层:单输出单元

假设每一层都存在偏差。此外,池化层有一个权重(类似于 AlexNet)

这个网络有多少权重?

这将是 Keras 中的相应模型,但请注意,我问的是如何用公式计算它,而不是在 Keras 中。

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Conv2D, MaxPooling2D

model = Sequential()
model.add(Conv2D(60, (7, 7), input_shape = (100, 100, 1), padding="same", activation="relu")) # Layer 1
model.add(Conv2D(100, (5, 5), padding="same", activation="relu")) # Layer 2
model.add(MaxPooling2D(pool_size=(2, 2))) # Layer 3
model.add(Dense(250)) # Layer 4
model.add(Dense(200)) # Layer 5

model.summary()
1个回答

计算 CNN 中的参数数量非常简单。

CNN 由不同的过滤器组成,它们本质上是 3d 张量。CNN 权重是共享的,这意味着它们被多次使用并在不同的位置重复使用。每一层都有n张量,每个都有维度w×h×c, 在哪里w=宽度,h=高度,c= 通道(输入通道大小)。因此,一个卷积层的参数个数为whcn. 每个输出通道也有一个偏差,所以偏差的数量是n. 最后,参数编号计算如下:nwhc+n. 查看更多关于此的信息:文章

池化层没有权重,只有超参数你可能混淆了这两者。有用于步幅、因子等的超参数。这些是预定义的,不可训练。

对于 Keras,您可以在此处使用解决方案。