网络模型统计
想统计主流网络大小和图像分类的准确率,没有直接搜到答案,但发现个好东西,"torchvision.models",这个pytorch库可以直接导入模型,然后可以查看网络大小,同时torchvision.models还提供了预训练模型,而且列出了准确率,真是太良心了!除了图像分类,还有语义分割、目标检测、视频分类等任务的模型和准确率。
#https://pytorch.org/vision/stable/models.html
import torchvision.models as models
net = models.alexnet()
#net = models.mnasnet1_0()
net.to('cpu')
#https://github.com/sksq96/pytorch-summary
from torchsummary import summary
summary(net,(3,224,224))
有以下几点需要注意:
- Total params 表示所有超参数(权重)的个数P,每个超参数用浮点数float32表示,占4Byte空间,因此$Params_size =\frac{P\times4}{1024^2}=\frac{61100840\times4}{1024^2}=233.08MB$
- Forward/backward pass size 表示每层输出的缓存大小,通过列表“Output Shape”计算,最后还要乘以2,保存反向传播的梯度信息:
Forward/backward pass size:
$$ \frac{1098216\times 4\times2}{1024^2}=8.3787MB $$输入大小为:$\frac{3\times224^2\times4}{1024^2}=0.574MB$
最后列出一些典型网络的信息: (其中数据流个数记录的是推理过程中输出层的缓存个数)