如何计算一个用于将图像分类为两类的卷积神经网络的权重数量?
- 输入:100×100的灰度图像。
- 第一层:包含60个7×7卷积滤波器的卷积层(步长=1,有效填充)。
- 第二层:包含100个5×5卷积滤波器的卷积层(步长=1,有效填充)。
- 第三层:一个最大池化层,将第二层的尺寸缩小4倍(例如,从500×500缩小到250×250)。
- 第四层:包含250个单元的全连接层。
- 第五层:包含200个单元的全连接层。
- 第六层:单个输出单元。
假设每一层都存在偏置。此外,池化层也有一个权重(类似于AlexNet)。
这个网络有多少权重?
一些Keras代码
import kerasfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Conv2D, MaxPooling2Dmodel = Sequential()# 第一层model.add(Conv2D(60, (7, 7), input_shape = (100, 100, 1), padding="same", activation="relu"))# 第二层model.add(Conv2D(100, (5, 5), padding="same", activation="relu"))# 第三层model.add(MaxPooling2D(pool_size=(2, 2)))# 第四层model.add(Dense(250))# 第五层model.add(Dense(200))model.summary()
回答:
TL;DR – 适用于TensorFlow + Keras
使用Sequential.summary
– 链接到文档。
使用示例:
from tensorflow.keras.models import *model = Sequential([ # 你的架构在这里]);model.summary()
你的架构的输出是:
Model: "sequential"_________________________________________________________________Layer (type) Output Shape Param # =================================================================conv2d (Conv2D) (None, 94, 94, 60) 3000 _________________________________________________________________conv2d_1 (Conv2D) (None, 90, 90, 100) 150100 _________________________________________________________________max_pooling2d (MaxPooling2D) (None, 45, 45, 100) 0 _________________________________________________________________flatten (Flatten) (None, 202500) 0 _________________________________________________________________dense (Dense) (None, 250) 50625250 _________________________________________________________________dense_1 (Dense) (None, 200) 50200 _________________________________________________________________dense_2 (Dense) (None, 1) 201 =================================================================Total params: 50,828,751Trainable params: 50,828,751Non-trainable params: 0_________________________________________________________________
共有50,828,751个参数。
解释
2D卷积层中的权重数量
对于一个2D卷积层,具有
num_filters
个滤波器,- 滤波器大小为
filter_size * filter_size * num_channels
, - 每个滤波器有一个偏置参数
权重数量为:(num_filters * filter_size * filter_size * num_channels) + num_filters
例如:你的神经网络中的第一层具有
- 60个滤波器
- 滤波器大小为7 * 7 * 1。(注意,通道数量(1)来自输入图像。)
其中的权重数量为:(60 * 7 * 7 * 1) + 60
,即3000
。
全连接层中的权重数量
对于一个全连接层,具有
num_units
个神经元,- 前一层的
num_inputs
个神经元, - 每个神经元有一个偏置参数
权重数量为:(num_units * num_inputs) + num_units
例如 你的神经网络中的第五层具有
- 200个神经元
- 前一层(第四层)有250个神经元。
其中的权重数量为200 * 250 + 200
,即50200
。