【pytorch】pytorch学习笔记(续3)

p41:1.Leak ReLU,SELU,softplus

2.GPU加速:.to方法

【pytorch】pytorch学习笔记(续3)_第1张图片

p42不太懂

p43:1.visdom,tensorbroadX

p44

p45:1.如何检测过拟合?在train上表现很好,而在test上表现不好。

test的目的(没有val set的时候):防止过拟合,选取最优参数。相当于是验证集。

一般选取test accuracy最高的那点停止训练,作为最优参数。

【pytorch】pytorch学习笔记(续3)_第2张图片

p46:1.train--validation--test

2.k折交叉验证法

把train分成k份,把k-1份作为train,1份作为val。

3.一般会把数据集划分为train和test,用train=True/False来区分是训练集还是测试集。

把数据集划分为train和test:

【pytorch】pytorch学习笔记(续3)_第3张图片

再把train划分为train和val:

p47:1.减轻overfitting的方法:

  1. 更多的数据;

(2)降低模型的复杂的:数据不是很多的时候模型不要很深,使用正则化;

(3)加droptout;

(4)进行数据增强;

(5)早停。

(本节课将正则化)

2.正则化(也叫权重衰减):对损失函数加正则项

正则项接近于0时,模型的复杂度会降低。 ?

因为对损失函数最小化的时候,不仅对原本的损失函数做了最小化,还对正则项做了最小化,从而使得模型的低微变量的参数相对较大,二高维变量的参数十分接近于0,这就会造成不仅使得模型的表现最优,还使得模型的复杂度得到了降低的效果,从而实现在不影响模型表现的情况下降低模型复杂度的目的。

3.常用的正则化分两种:

(1)在原损失函数上加一个1范数;

【pytorch】pytorch学习笔记(续3)_第4张图片

说明:pytorch没有提供直接的方法,所以需要人为的实现F1范数。

(2)在原损失函数上加一个2范数。(最常用)

pytorch实现:

【pytorch】pytorch学习笔记(续3)_第5张图片

说明:1)SGD得到了网络的所有参数,设置一个weight_decay=0.01,即正则项中的参数。

2)如果模型没有overfitting,那么使用正则项会使得模型的表达能力急剧下降;但如果模型overfitting了,那么如果正则项参数设置合理的话,会在不影响模型表现的情况下降低模型的复杂度,减轻模型的overfitting,模型在测试集上的表现也会有所提升。

p48:1.动量(momentum惯性)

【pytorch】pytorch学习笔记(续3)_第6张图片

pytorch实现:

【pytorch】pytorch学习笔记(续3)_第7张图片

2.学习率衰减(learning rate decay):随着学习时间的推移,学习率逐渐变小,如:由0.1逐渐减小为0.001。

两种常见的学习率衰减的方案:

(1)当一定次数的loss不减小,就认为该学习率下已达到了最优,需要减小学习率了。

pytorch实现:

【pytorch】pytorch学习笔记(续3)_第8张图片

说明:optimizer的作用是把学习率丢给Plateau管理,’min’的作用是监听,监听一定次数的调用(epoch)loss是否达到饱和(即不再减小),若达到饱和则需要根据你的规则(乘0.5或者0.8...)来衰减学习率;若没有的话则什么都不做,只是记录一下。

(2)规定每多少个(比如20k个)调用(epoch)衰减为原来的0.1或者...。

pytorch实现:

【pytorch】pytorch学习笔记(续3)_第9张图片

p49:1.早停

【pytorch】pytorch学习笔记(续3)_第10张图片

如何实现早停:

(1)用val set来选择参数;

(2)用val set来监测模型的表现;

(3)在val set表现的最高点(根据经验所得)提前停止训练模型。

2.dropout:迫使有效的w参数的数目越小越好

(1)如何实现:对每一个w(或者每一条边)定义一个额外的属性:probaiblity,即在前向传播中,每一条边都有一定的概率会输出为0,即把原本应输出为wx的输出为0,即把这条连接(即边)给断掉。这样会减少每次前向传播时的网络连接数量,训练时的参数数量会减少。

(2)pytorch实现:

可以在任何有需要连接的层之间加一个dropout层。不加dropout层的话,原来有连接的两层之间是一个直连,即前一层的输出就是后一层的输入。但加上dropout层之后,就会将两层之间的连接断掉一部分,即前一层的输出不能全部作为后一层的输入。

【pytorch】pytorch学习笔记(续3)_第11张图片

注意:(1)

torch中的p=dropout_prob,即连接断掉的概率,当p=1时连接都有可能被断掉,当p=0.01时连接被断掉的概率很小。

而nn里的是keep_prob,即连接保留的概率,当p=1时连接被断掉的概率很小,当p=0.01时连接被断掉的概率很大。

(2)dropout的行为在train和test的时候是不同的:在train的时候dropout会断掉部分连接,而在test的时候不会断掉连接。因此在validation的时候要手动的切换到test模式。

【pytorch】pytorch学习笔记(续3)_第12张图片

3.随机梯度下降(Stochastic Gradient Descent)

(1)Stochastic并不是random的意思,而是说具有一定的随机性。与Stochastic相反的是Deterministic:一一对应,而Stochastic是指给了一个x,f(x)是服从一个分布的,如0均值正态分布。

(2)这里Stochastic的意思是:从整个的数据集中随机的取出一个小部分样本来,如:从60k的数据集中取出一个128的batch来。

(3)随机梯度下降(Stochastic Gradient Descent):就是把原来在整个数据集上的梯度求和的平均变成了在一个batch上的所有梯度求和平均。

(4)为什么要使用随机梯度下降?因为目前的硬件设备容量不够,不可能一次性把所有的数据加载进来来计算,这样的话设备成本太高。

p50:1.(1)计算网络层数的时候,不把输入层计算在内。

(2)一层一般包括这一层的权值(和上一层的连接的权值)和输出。

2.卷积:模仿人眼的局部相关性,即一次观察一小块,(感受眼)

权值共享:用小窗口扫过整张图片,扫的过程中权值W是不变的。

只考虑局部相关的数据,不必全连接,大大减少了参数量。

卷积操作:小窗口与整张图片上对应大小的部分相乘再累加。

p53:1.kernal/weight/filter:[有几种kernal,输入里的通道数,kernal的长,kernal的宽]。

每一个kernal都会带一个偏值,偏值与kernal的第一个维度(即有几种kernal)是对应起来的。

p54:1.pytorch实现:

【pytorch】pytorch学习笔记(续3)_第13张图片

stride有降维的效果。

推荐使用实例调用方法,不推荐直接使用.forward()函数。

另一种实现方法:

【pytorch】pytorch学习笔记(续3)_第14张图片

pytorch中小写的是函数,大写的是类。——pytorch中的一个命名规范。

stride=2:size/2

padding=2:size+2


(未完,待续~)

你可能感兴趣的:(pytorch,学习,笔记)