深度学习——深卷积网络:实例探究[11] (2)

深度学习——深卷积网络:实例探究[11]

问题:计算量很大

以上例中5x5过滤器为例,就需要计算120M次乘法

例  Input: 28x28x192 filter: 5x5 same 32   output:28x28x32

计算次数=5x5x32x28x28x32约等于120M

解决方法:加一个1x1过滤器,也称为bottleneck层(瓶颈层,是网络中是小的层)

28x28x192--conv 1x1x192 16-->28x28x16--conv 5x5x16 32-->28x28x32

计算次数=28x28x192x16 + 5x5x16x28x28x32 约等于12.4M下例中计算量就会降成12.4M

 一个更完整些的Inception模块

深度学习——深卷积网络:实例探究[11]

大型的Inception网络结构:

其实就是把上面的模块重复连接。另外,网络后面几层会有一些分支。它们也和最后的输出一样进行输出,也就是说隐藏层也参与了最后输出的计算,这样可以避免过拟合的问题

小故事:Inception原名是googlenet,是为了向LeNet致敬,而后引用了Inception(盗梦空间),意在建议更深的网络

五、迁移学习

在CV中经常会用到迁移学习:利用已经训练好的网络来学习其它问题。一般推荐使用开源的网络来做,而非从0开始。根据拥有的数据量不同,有不同的处理方式

数据量很小的时候,可以把最后一层softmax替换掉,而把前面所有的层不变(一般有参数如trainable, freeze可以用于设置参数不变),只训练最后一层

数据量大一些的时候,可以多训练几层,也就是把前几层freeze,而后面几层进行训练

数据量很大时,可以对整个网络进行训练,原来训练好的结果作为初始值, 这样就不用用随机初始化

六、数据扩充(augmentation)

对于CV应用,一般来说数据越多,网络性能越好。对于其它应用可能不一定,但是对计算机视觉,数据量是一个重要的因素。数据扩充就是对原有数据进行处理以获得更多的数据

常用的方法

mirror(镜像)/random crop(随机裁剪)/rotation(旋转)/shearing(切变)/local warping(局部扭曲变形)

深度学习——深卷积网络:实例探究[11]

改变颜色(PCA(主成分分析))

深度学习——深卷积网络:实例探究[11]

data augmentation(增强)的实现

采用多线程,一个线程读取数据并修改,改后的数据传递给其它线程训练,实现数据处理与网络训练并行

超参数:颜色要改变多少,裁剪什么位置等

七、如何使用开源代码

使用网络框架

尽可能使用开源的实现

使用预训练好的模型,并在自己的数据集上fine-tune

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwfxsg.html