CNN 从入门到放弃:

282 阅读5分钟


卷积神经网络 :特点  权值共享

三个通道,三个不同的卷积核(应该算是卷积核1的三种模式),然后在三个通道求和。对于新的卷积核2,然后在重复上述操作。将1,2两个卷积核求得的结果相拼接。

输出矩阵的深度和卷积核个数相同。

激活函数,非线性,使得有解决非线性的能力。

激活函数对比:

SIgmoid:特点:1.在饱和的地方梯度容易消失。网络层数深的时候,容易消失梯度 2. 梯度不容易求。

Relu:1. 梯度容易求 2. 学习率高,或者梯度大的话,容易造成神经元deactivated。


池化:减小数据量。进行稀疏处理。没有训练参数。会改变高和宽。不改变 深度。


Pytorch 官方实例。

卷积层实例化参数(输入深度(图像的深度),卷积核的个数(也就是输出的深度),卷积核的尺寸,也就是可以算出新的feature map的尺寸,)  padding 和 stride默认为1

输入(3,32,32)  卷积层参数(3,16,5)   输出:(16(卷积核个数,也就是 feature map的深度),长和宽(W-卷积核的尺寸+2倍padding/步长+1))

池化层 一般 (kenel 尺寸是2,步长也是2).因此深度不变,长和宽就变成了 一半.(16,14,14(28的一半))

全连接层的输入是一个一维向量,所以之前的输出需要展平(32*5*5).最后一个全连接层的在定义的时候。输出的是类别

。view() 展平

激活函数不会对shape产生变化吗?

transform()对图像预处理:

Totensor()方法。将PIL图像或者numpy的数据转化为(Channel,Width,height) 而不是PIl(H,W,C).同时,也把值从0-255变到0-1.

Numalize() 标准处理 

crossentroloss 损失韩式,内部实现了softmax函数,

optim. adam(net.parameters)

zero_grad(),在每一个批中当中都需要把 历史梯度清除。目的:用小的batch size获得大的batch size 的效果。注意。batchsize 越大,训练效果越好。

计算出损失,进行反向传播,然后再step()更新


torch.no_grad() 为什么不要计算损失梯度呀



ALex的网络结构:

2012的冠军,准确度到了80多,128万个

特点。1.第一次用GPU2. Relu 激活函数 ,而不是sigmoid 以及Tanh 3. 使用了Lrn局部响应归一化4. 在全连接层的前两层使用了Dropout随机失活,减少了过拟合。过拟合,深度过多,或者数据过小。每一层随机失活,减小参数 

。最开始 padding 上面加两列,下面加一列(所以是2+1)而不是2+2

最大池化 ,kenel size 3, padding0 stride 2 。输出 27,27,256(256个卷积核)

pytorch中,所有的初始化权值先不用管,内部自动用凯明初始化去解决


训练和 预测中 使用 eval()方法可以关掉dropout方法


VGG 2014 

3个3*3卷积核堆叠代替 1个7*7 ,减少参数

stride,padding 默认为1,  7*7的参数个数是27C的平方, 3*3是27 C的平方,感受野相同,参数变少.

根据他这个配置,在卷积的过程中,尺寸大小不变

感受野的计算就是求feature map的可逆运算

用VGG 16 做例子:(全连接层+卷积层总共16层)

也有dropout方法


GoogleNet 详解:2014 分类任务第一,inception结构,两个辅助分类器,丢弃全连接

I*1的结构(第一层1*1 24个,第二层64个5*5)相比于直接64个5*5:降低了参数  .


辅助分类器,在iception 4 a  14*14 512 和 4d的输出 14*14  padiing=0


小,参数很小,参数是VGG的20分之一。比较麻烦搭建


反向传播过程:

softmax,是的输出的值符合概率分布,使得概率相加=1

交叉熵:

多酚类,softmax输出

二分类的交叉熵交叉熵公式不一样。每个输出节点互不相关(男人 ,人类)


Res结构:

2015微软。

34层结构

深的话(梯度消失2. 梯度大于1 梯度爆炸)

特点:1.深2. 2. 残差解决退化问题 3. residual 3. BN ,丢弃 drop out 


过程: 主分支,和原输出 的shape相同feature的相加

虚线部分,表示捷径部分通过一些卷积处理的到尺寸和主干部分的尺寸相同 padding好像是1.


BN 特点:加速网络收敛

一批数据的的特征矩阵,满足均值为0,方差为1。不用r,B

对同一批每一个channel的方差和均值计算

注意事项:1. batch size 越大越好 2. 不要再卷积层里面用,应该在卷积层和激活曾中用3.卷积不用偏差。因为值是一样的,参数也会增加

4. 训练中用,验证中不要用


迁移学习特点

1.快速训练模型2.数据集小也可以拿到一个好的结果

预处理方式需要和之前的模型一样。

迁移学习的原理: 浅层网络的参数,获得一些通用的特征能力

迁移学习的三种方法:

1. 训练全部参数(效果好,稍慢,但是比不用迁移学习快)

2. 训练全连接层几层参数

3.增加一层最后的全连接层进行训练