Inception V1参数少但效果好的目的有两点:第一,参数越多模型越庞大,需要提供模型学习的数据量就越大,而目前高质量的数据非常昂贵。第二,参数越多,耗费的计算资源也会更大。Inception V1参数少但效果好的原因处理模型层数更深、表达能力更强外,还有两点:一是去除了最后逇全连接层,用全局平均池化层(即将图片尺寸变为1x1)来取代它,去除全连接层后模型训练更快并且减轻了过拟合。二是Inception V1中精心设计的inception module提高了参数的利用效率。
| 类型 | kernel 尺寸/步长(或注释) | 输入尺寸 |
| 卷积 | 3x3 / 2 | 299x299x3 |
| 卷积 | 3x3 / 1 | 149x149x32 |
| 卷积 | 3x3 / 1 | 147x147x32 |
| 池化 | 3x3 / 2 | 147x147x64 |
| 卷积 | 3x3 / 1 | 73x73x64 |
| 卷积 | 3x3 / 2 | 71x71x80 |
| 卷积 | 3x3 / 1 | 35x35x192 |
| Inception 模块组 | 3个 Inception Module | 35x35x288 |
| Inception 模块组 | 5个 inception Module | 17x17x768 |
| Inception 模块组 | 3个 Inception Module | 8x8x1280 |
| 池化 | 8x8 | 8x8x2048 |
| 线性 | logits | 1x1x2048 |
| Softmax | 分类输出 | 1x1x1000 |
Inception v3 的inception Module 有35x35,17x17和8x8三种不同的结构,具体如下:
slim.arg_scope,是一个非常有用的工具,可以给函数的参数自动赋予某些默认值。
因为代码比较复杂就,LZ就懒的敲了,有一段截图,关于本网络的,我贴出来,分享一下: