macs (Multiply–Accumulate Operations) изначально был аппаратным индикатором, но в последние годы он часто появлялся при оценке скорости работы моделей глубокого обучения.Мы можем использоватьtorchprofile
Расчет.
Здесь я напрямую использую встроенную модель в этом пакете вычислений факела.Конкретный метод использования выглядит следующим образом:
from torchprofile import profile_macs
profile_macs(model,inputs)
Полный код выглядит следующим образом:
import torch
from torchvision import models
from torchprofile import profile_macs
import os
ls=dir(models)
ls.sort()
res=[]
for i in ls:
if not (i.startswith('_')) and (i!='utils.py'):
res.append(i.split('.')[0])
print(res)
macs_results={}
for i in res:
try:
MACs=profile_macs(eval('models.'+i+'()'),inputs)
macs_results[i]=MACs
except Exception as e:
pass
Мы можем построить результат:
import matplotlib.pyplot as plt
x_x = []
y_y = []
s = sorted(macs_results.items(), key=lambda x: x[1], reverse=False)
for i in s:
x_x.append(i[0])
y_y.append(i[1])
x = x_x
y = y_y
fig, ax = plt.subplots()
ax.barh(x, y, color="deepskyblue")
labels = ax.get_xticklabels()
plt.setp(labels, rotation=0, horizontalalignment='right')
for a, b in zip(x, y):
plt.text(b+1, a, b, ha='center', va='center')
ax.legend(["label"],loc="lower right")
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.ylabel('model name')
plt.xlabel('MACs')
plt.rcParams['savefig.dpi'] = 300 # 图片像素
plt.rcParams['figure.dpi'] = 300 # 分辨率
plt.rcParams['figure.figsize'] = (20.0, 1.0) # 尺寸
plt.title("models for MACs")
Результат выглядит следующим образом: