【北上广深杭大厂AI算法面试题】深度学习篇...这里介绍CNN模型所需的计算力(flops)和参数(parameters)数量是如何计算的?附代码。(二)
【北上广深杭大厂AI算法面试题】深度学习篇...这里介绍CNN模型所需的计算力(flops)和参数(parameters)数量是如何计算的?附代码。(二)
·
【北上广深杭大厂AI算法面试题】深度学习篇…这里介绍CNN模型所需的计算力(flops)和参数(parameters)数量是如何计算的?附代码。(二)
【北上广深杭大厂AI算法面试题】深度学习篇…这里介绍CNN模型所需的计算力(flops)和参数(parameters)数量是如何计算的?附代码。(二)
文章目录
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
详细信息可关注V “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/145551342
前言
- 在深度学习模型中,计算力(FLOPs, Floating Point Operations)和参数数量(Parameters)是衡量模型复杂度和计算需求的重要指标。
- 了解它们如何计算对于优化模型、评估模型的计算开销以及在硬件上部署模型至关重要。
- 本文将结合卷积神经网络(CNN)的结构,详细说明如何计算CNN模型的FLOPs和参数数量,并提供相应的代码示例。
3. 计算 FLOPs 和 Parameters 的 Python 代码
下面的 Python 代码实现了计算 CNN 模型的参数数量和 FLOPs。
import numpy as np
# 卷积层参数计算函数
def conv_params(K_h, K_w, C_in, C_out):
"""
计算卷积层的参数数量
:param K_h: 卷积核的高度
:param K_w: 卷积核的宽度
:param C_in: 输入通道数
:param C_out: 输出通道数
:return: 卷积层参数数量
"""
return (K_h * K_w * C_in + 1) * C_out # +1 是偏置项
# 卷积层FLOPs计算函数
def conv_flops(H_in, W_in, K_h, K_w, C_in, C_out):
"""
计算卷积层的FLOPs
:param H_in: 输入的高度
:param W_in: 输入的宽度
:param K_h: 卷积核的高度
:param K_w: 卷积核的宽度
:param C_in: 输入通道数
:param C_out: 输出通道数
:return: 卷积层的FLOPs
"""
H_out = H_in - K_h + 1 # 输出的高度
W_out = W_in - K_w + 1 # 输出的宽度
return H_out * W_out * K_h * K_w * C_in * C_out * 2 # 每个卷积操作需要K_h*K_w*C_in*2次浮点运算
# 全连接层参数计算函数
def fc_params(N_in, N_out):
"""
计算全连接层的参数数量
:param N_in: 输入神经元数
:param N_out: 输出神经元数
:return: 全连接层参数数量
"""
return N_in * N_out + N_out # 每个神经元的权重和偏置
# 全连接层FLOPs计算函数
def fc_flops(N_in, N_out):
"""
计算全连接层的FLOPs
:param N_in: 输入神经元数
:param N_out: 输出神经元数
:return: 全连接层的FLOPs
"""
return 2 * N_in * N_out # 每个神经元需要2次浮点运算(乘法和加法)
# 示例:计算一个简单的CNN层的参数和FLOPs
def example_cnn_calculations():
# 假设一个卷积层的参数
K_h, K_w, C_in, C_out = 3, 3, 1, 32 # 3x3卷积核,1输入通道,32输出通道
H_in, W_in = 32, 32 # 输入图像大小32x32
# 计算卷积层的参数数量
conv_params_num = conv_params(K_h, K_w, C_in, C_out)
print(f"卷积层参数数量: {conv_params_num} 参数")
# 计算卷积层的FLOPs
conv_flops_num = conv_flops(H_in, W_in, K_h, K_w, C_in, C_out)
print(f"卷积层FLOPs: {conv_flops_num} FLOPs")
# 假设一个全连接层的参数
N_in, N_out = 1024, 10 # 输入1024个特征,输出10个类别
# 计算全连接层的参数数量
fc_params_num = fc_params(N_in, N_out)
print(f"全连接层参数数量: {fc_params_num} 参数")
# 计算全连接层的FLOPs
fc_flops_num = fc_flops(N_in, N_out)
print(f"全连接层FLOPs: {fc_flops_num} FLOPs")
example_cnn_calculations()
4. 代码输出
假设输入大小为 32 × 32 32×32 32×32,卷积核大小为 3 × 3 3×3 3×3,输入通道数为 1,输出通道数为 32,最后是一个全连接层的输入特征数为 1024,输出特征数为 10,代码输出如下:
卷积层参数数量: 320 参数
卷积层FLOPs: 18432 FLOPs
全连接层参数数量: 10250 参数
全连接层FLOPs: 20480 FLOPs
5. 总结
- 参数数量:决定了模型的大小和存储需求。卷积层的参数数量取决于卷积核大小、输入通道数和输出通道数,而全连接层的参数数量取决于输入和输出的神经元数。
- FLOPs:衡量了模型计算的复杂度。卷积层的FLOPs依赖于卷积核大小、输入和输出的大小,以及输入通道数和输出通道数。全连接层的FLOPs依赖于输入和输出神经元数。
通过上述方法,你可以计算CNN中各层的参数数量和FLOPs,从而评估模型的计算需求和复杂度。
更多推荐
所有评论(0)