【深度学习模型复杂度评估指标】深度学习模型性能和效率的评估指标介绍和计算方法!
【深度学习模型复杂度评估指标】深度学习模型性能和效率的评估指标介绍和计算方法!
文章目录
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议入口:https://ais.cn/u/mmmiUz
深度学习模型性能和效率的对比指标中,以下是每个指标的详细解释及其代码计算方法:
1. FLOPs (Floating Point Operations per Second)
- FLOPs 代表模型在一次前向传播过程中需要执行的浮点运算数,单位为G(即10^9)。FLOPs 是模型复杂度的一个衡量标准,FLOPs 越低,模型计算量越小,推理速度通常越快。计算 FLOPs 可以使用
ptflops
库或者torchprofile
等工具。
代码示例(使用 ptflops 库):
import torch
from ptflops import get_model_complexity_info
from torchvision.models import resnet18 # 示例模型
model = resnet18()
with torch.cuda.device(0): # 可以指定GPU
flops, params = get_model_complexity_info(model, (3, 224, 224), as_strings=True, print_per_layer_stat=True)
print(f"FLOPs: {flops}")
2. Parameters (M)
- Parameters
指模型中可训练的参数数量,以百万(M)为单位。参数数量越多,模型可能越复杂,但参数过多可能导致过拟合问题。torchsummary
或ptflops
等库可以用于计算参数数目。
代码示例(使用 torchsummary 库):
from torchsummary import summary
model = resnet18()
summary(model, input_size=(3, 224, 224)) # 参数数会自动显示
3. Memory (MB)
- Memory 表示模型在推理过程中的内存消耗,以MB为单位。PyTorch 自带的
torch.cuda.memory_allocated()
可以查看 GPU 上的内存占用;也可以通过估算模型参数量、输入大小和中间结果等数据量来计算内存消耗。
代码示例(GPU内存消耗):
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = resnet18().to(device)
dummy_input = torch.randn(1, 3, 224, 224).to(device)
torch.cuda.reset_peak_memory_stats(device)
_ = model(dummy_input)
memory_used = torch.cuda.max_memory_allocated(device) / (1024 ** 2) # 转换为MB
print(f"Memory Usage: {memory_used:.2f} MB")
4. Running Time (0.001s)
- Running Time 表示模型每次推理所需的时间,一般单位是毫秒(ms),可以通过多次前向传播求平均时间。
time
或timeit
库可以帮助记录每次推理的时间。
代码示例(使用 time 库):
import torch
import time
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = resnet18().to(device)
dummy_input = torch.randn(1, 3, 224, 224).to(device)
# 多次运行求平均推理时间
num_runs = 100
start_time = time.time()
with torch.no_grad():
for _ in range(num_runs):
_ = model(dummy_input)
end_time = time.time()
avg_time = (end_time - start_time) / num_runs * 1000 # 转换为毫秒
print(f"Average Running Time: {avg_time:.2f} ms")
5. Inference Speed (FPS)
Inference Speed 是每秒钟模型可以处理的帧数(Frames Per Second, FPS),FPS 越高代表模型推理速度越快。通过运行一定次数的推理并计算平均每秒处理的帧数,可以得到 FPS。
代码示例:
import torch
import time
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = resnet18().to(device)
dummy_input = torch.randn(1, 3, 224, 224).to(device)
num_frames = 100
start_time = time.time()
with torch.no_grad():
for _ in range(num_frames):
_ = model(dummy_input)
end_time = time.time()
fps = num_frames / (end_time - start_time)
print(f"Inference Speed: {fps:.2f} FPS")
以上代码适用于 PyTorch 框架,其他深度学习框架(如 TensorFlow)也有相似的功能。通过这些代码,你可以获取模型的 FLOPs、参数数量、内存消耗、推理时间和 FPS 指标。
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议入口:https://ais.cn/u/mmmiUz