下面再给出一个caffe中的具体例子(mnist的lenet_train_test.prototxt): 
用 link1 的方法画出网络模型图如下(图片有点小~~具体的数字可以参考 lenet_train_test.prototxt): 
caffemodels模型下载\通过网络结构估算caffemodel文件的大小

该网络主要有两个卷积层和两个全连接层,具体可以简化如下图(两个卷积层的卷积核都为5*5,步长stride都为1,两个pool层都为2*2,步长为2): 
caffemodels模型下载\通过网络结构估算caffemodel文件的大小

下面是对各层w和b参数的计算,(如果对参数数量计算方式不是很了解的可以参看下面的这篇博文: link2

  1. conv1:

    • w数量:5*5*1*20=500
    • b数量:20
  2. conv2:

    • w数量:5*5*20*50=25000
    • b数量:50
  3. ip1:

    • w数量:1*1*(4*4*50)*500=400000
    • b数量:500
  4. ip2:

    • w数量:1*1*500*10=5000
    • b数量:10

把上面各层的参数相加得到: 
(500 + 20) + (25000 + 50) + (400000 + 500) + (5000 + 10) = 431080 
即总共有431080个w和b参数,因为每一个参数以float类型(4 Bytes)存储,所以存储这么多参数需要的空间为: 
431080 * 4 = 1724320 (Byte) 约等于 1.64 MB 。

计算出来的结果和训练得到的caffemodel的大小差不多(稍微小了一点)。

到这里,我们就基本上解释了怎么估算一个caffemodel的大小了。上面还卖了个关子,提到w和b参数除了和网络结构有关以外,还和网络的输入有关。 
以上面的mnist例子来说,假如输入不是28*28而是N*N(这里N是比28大的一个整数),那么假设pool2的输出表示为n*n(在网络结构不变的情况下,这里的n比4大),所以也就导致了ip1全连接层的w参数数量增多(ip1的w参数数量为 n*n*50*500),从而导致了caffemodel大小的变化。

从上面的计算大家也可以看到,一个网络的大小很大程度上取决于全连接层,第一个全连接层的连接数(参数数量)一般是最多的。后来《Network in Network》把全连接层换成average pooling,目的就是为了减小参数的数量。有兴趣的朋友可以搜一搜这篇论文看看。

大概就这样吧~~

相关文章:

  • 2021-08-25
  • 2022-12-23
  • 2021-07-28
  • 2021-09-17
  • 2021-11-13
  • 2022-12-23
  • 2021-07-24
猜你喜欢
  • 2021-12-16
  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2021-08-02
  • 2021-12-11
  • 2022-12-23
相关资源
相似解决方案