卷积神经网络 :特点 权值共享
三个通道,三个不同的卷积核(应该算是卷积核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.增加一层最后的全连接层进行训练