在训练完一个网络保存模型以后,我常常会将最优的模型保存。最终大小可能是几十MB,可能是几百MB,但模型的大小是由什么决定的呢?其实我们的模型在我们确定网络结构以后就已经将模型的大小确定了,模型文件存放参数,参数数量又是网络结构决定,所以模型大小由网络结构决定。下面将具体介绍一下:

以LeNet-5手写体数字识别为例

下面是一个单通道图像的输入LeNet-5网络前向计算模拟图:
在这里插入图片描述

  • 网状立体格子表示kernel,其他颜色方图表示feature map(Input表示输入层,可以看做特殊的feature map)
  • 一个kernel对应一个feature map
  • 参数量主要为kernel大小
  • 每个kernel带一个bias

整个网络占据权重的为Convolution/Innerproduct 两层,分别计算参数量为,:

  1. C1: 5 x 5 x 20 = 500,5x5卷积核, 20个feature map输出,20个kernel

  2. C2: 20x 5 x 5 x 50 = 25000 ,20维度输入,则20x5x5 kernel,50个feature map输出,即相当于20通道的图像输入,则需要20x5x5的kernel来卷积乘,50个这样的卷积核操作得到50个feature map,50个kernel

  3. F1: 50x4x4x500 = 400000,50维度特征图输入,全连接,每个点做卷积乘,则kernel大小为50x4x4,共500个feature map输出,500个kernel

  4. F2 : 500x1x1x10 = 5000,500维度特征图输入,全连接,kernel大小为500x1x1,共10个feature map输出,10个kernel

用float类型(4个字节)来存储参数,则总的参数量大小为:

  • 500 + 25000 + 400000 + 5000 + (20 + 50 + 500 + 10) = 431080

字节数为:

  • 431080 x 4 = 1724320 ≈ 1683.90625kb ≈ 1.64M
    对比实际LeNet-5网络基于caffe训练出来的模型大小为:1.64 MB (1,725,025 字节),基本接近,因为模型中可能还带有附加特性参数。

从上我们看出,在我们确定了网络的基本结构时模型大小就已经确定了。
我们在对一个网络进行训练时,常常使用一些预训练模型,这些预训练模型往往就是我们最后模型的大小!



Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐