20170328#cs231n#12.CNNs in Practice

得到更多数据

在小数据集用数据增强和迁移学习是很合适的

Data augmentation数据增强

这是一种很容易实现的方法。
在图片输入CNN之前先做一些变化,应该是改变了每一个pixel,但是图片的label保持不变。可能减小过拟合的发生。

  • Horizontal flips 水平翻转
  • Random crops/scales 随机裁剪/缩放图片(在test的时候要对test set进行裁剪缩放水平翻转等操作,生成至少10张图片,然后输入CNN进行前向传播计算得分的平均值)
  • Color jitter 颜色变动(最简单的是改变对比度,但不常用;经常是对RGB的pixels采用PCA)
  • 平移,旋转,伸长,裁剪等等等

Data augmentation就是在增加训练集防止过拟合,而dropout随机去掉网络的某些部分。

Transfer learning迁移学习

先把网上下载的模型把前面的层给freeze固定下来。
然后将数据输入之前被freeze的部分进行前向传播然后把特征输出到硬盘中。
然后把最后一层重新随机初始化(最后一层之前的层用原来的初始化即可),用上面储存在硬盘的数据训练最后几层。
最后将freeze的网络部分和我们训练出来的部分相结合,就是最后的新模型。

在训练的时候有三种学习率

  • freeze的层学习率为0
  • 下图中红框的FC和conv学习率为原来从网上下载来模型的1/100
  • 最后一层重新随机初始化的softmax(或被更改为别的层)学习率为下载来模型的1/10

  1. 把整个网络固定,只训练最后几层
  2. 当最后几层快要收敛的时候再对这些层微调

关于CNN的其他东西

How to stack convolutions 如何一层层建立CNN

3个3×3的卷积层和1个7×7的卷积层函数是相似的,因为看到的是同样大小的输入区域

由于CONV层后面还有ReLU,所以相对于7×7,3×3的方式有更多非线性单元,但是参数却更少

如果用1×1的receptive field小,但是却有奇效,如下图的Bottleneck sandwich结构

甚至有一些3×1和1×3交替使用的

How to stack convolutions:Recap

How to compute them 如何计算卷积神经网络

一种做法是im2col,然后再利用矩阵乘法


上图这种做法会耗费大量的内存,因为感受野会有很多重叠的地方,不过这个问题并不是很大。。。。


这是用快速傅里叶变换去计算卷积,但FFT只在大滤波器上提升速率明显,在3*3滤波器上提升不是很明显

Strassen’s Algorithm也是一种提高矩阵乘法速率的算法

Implementation Details实现细节

CPU有1~16个高速核心,对串行处理的比较好
GPU有很多个低速核心,对并行处理的比较好

对于CPU,一个线程在读取和预处理数据,一个线程在发送数据给GPU
实际中会把所有的图像预处理转成一个很长的pixel序列,虽然会占用很大空间,但是实际中还是会这样做

在深度学习中一般还是用32位浮点数而不是64位,这是为了提高计算速率和可存储的数字的数量

16位浮点数可能会更快,但是更可能会有数值精度问题
有一种技术叫做随机四舍五入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值