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

p55:1.pooling:下采样:即把特征集变小,有降维的作用。对于图片数据而言,可能是各行采样;而对于卷积神经网络而言,是池化层,如果是最大池化的话,那就是在窗口中选择最大值输出;如果是平均池化的话,那就是对窗口中的数据求平均值,并将平均值输出。

pytorch实现:

说明:nn,MaxPool2d(2,stride=2):第一个参数表示窗口的大小,第二个参数表示窗口移动的步长。

2.upsample:上采样,类似于图片放大。

pytorch实现:

说明:F.interpolate(x,scale_factor=2,mode=’nearest’):第一个参数表示tensor,第二个参数表示放大倍数,第三个参数表示插值方式,这里采用最近邻插值。

3.ReLU:

pytorch实现:

p56:1.为什么要进行Batch-Norm?:将数据映射到服从N(0,std)的区间上,避免出现梯度离散的现象。

2.这样的缩放(Feature scaling)有什么作用?:(1)图像归一化(image normalization)

p57:1.(2)批归一化(Batch normalization)

pytorch实现:1)1维

原理:先求均值和方差,然后归一化,再用学习到的β和γ进行缩放,得到N(β,γ)分布。

running的均值和方差还需要根据当前的均值和方差进行更新,同时β和γ也需要梯度信息进行自动的更新。

2)2维

说明:afine表示β和γ是否需要自动更新,一般都设置为True。

2.test时,可能只有一个测试案例,所以是无法取到batch的均值和方差的,所以test时使用的均值和方差是全局的均值和方差。而且由于test时没有后向传播,所以test时β和γ也是不需要更新的。

注意:test时要先把模式切换过来:layer.eval(),然后再进行Batch Normalization。

3.Batch Normalization的目的就是把数据的均值和方差都变小。

为什么均值不是0,方差不是1?:因为会有β和γ对分布进行调整,所以均值和方差不是0和1。

4.使用了Batch Normalization的好处:

(1)收敛速度更快了;(2)能得到一个更好的解;(3)更稳定了。(参数调整更方便了,超参数的调整没有那么敏感了,learning rate可调整的范围更大了)

p58:1.LeNet-5

2.AlexNet:(1)Max Pooling;(2)ReLU函数;(3)Droptout。

p59:1.VGG:发现更小型的卷积核更好。

2.1x1卷积的一个非常好的特性:可以改变输入和输出的维度,但不改变图片的大小,而且计算量更小。

1x1卷积和3x3卷积现在十分常用。

3.GoogLeNet:对同一层可以使用多个不同类型的卷积核。

并不是简单堆叠层数就可以提升模型效果。由图可见,在堆叠到20层左右的时候,再增加层数,会由于层数过多,训练难度过大,而导致train的效果不好,从而导致模型的效果并不好。因此,简单堆叠层数冰崩你提升模型效果。

p60:1.深度残差网络(ResNet):

(1)初衷:增加了一个短路层(shortcut),来确保30层的网络效果不会比22层的网络效果差。前22层训练后,与后8层并列的有一个短路层,如果后8层的训练效果并不好,那就训练完前22层后走短路层,如果后8层训练得好,那前22层训练完后就走后8层。这样就可以保证30层的网络的效果一定不会比22层的网络差。

(2)具体实施:每隔多少层加一个shaortcut层。

(3)原理网络堆叠单元的结构:,现在ResNet中的堆叠结构:(可能有polling也可能没有)。

(4)实践发现:最好是使用一个2-3层的卷积层,再加一个shortcut的效果比较好。

p61:1.ResNet和Inception计算量并不是很大但性能很好,而VGG计算量很大而且性能不是最好。所以在使用VGG的时候要有先验知识。现在常用ResNet和Inceptioni。

2.pytorch实现ResNet:

(不懂)

3.DenseNet:中间的每一层都有可能和前面的层短接。后面的层是对前面的层的一个综合,它不是对应元素相加,而是拼接,因此其channel会变得很大。因此DenseNet需要很精妙的设计才能使其计算量不是很大。

p62,63:1.nn.Module是所有网络层次的类的一个父类。当你要自己实现一个层的时候,必须要继承自这个类。

2.使用nn.Module有什么好处?

(1)提供了许多现成的神经网络的计算模块。

(2)作为一个容器:一个网络包含很多层(如:152层),那就需要152次前向传播,使用这个模块可以写一次前向传播,他就会帮你完成152次前向传播,不需要你手动地写那么多次。

(3)会对网络中的参数进行一个有效的管理。

(4)对网络内部的module的管理。

(不懂)

(5)可以把函数和方法方便地从gpu转移到cpu上面。

(讲解不懂)

(6)加载和保存:保存状态,预防断电,系统崩溃等意外情况的发生。

(7)可以方便地切换train和test的状态。

(8)实现自己的类Flatten:打平操作(可直接抄),使用十分广泛。

(9)实现自己的线性层。

p64:1.数据增强:使原来的数据变得多样化,增加数据量。

2.如何针对有限的数据进行优化?:(1)减少网络的参数量,避免过拟合;(2)加一些正则项,迫使网络的部分权值接近于0;(3)对原来的数据进行数据增强(如对照片进行裁剪,旋转,变色等操作)。

3.常用的数据增强方法:

(1)翻转:做不做翻转操作有一定的随机性;

(2)旋转;

说明:第一个15表示在[-15,15]区间内进行旋转,随机的一个角度;第二个[90,180,270]表示在这三个角度中选一个角度进行旋转。

(3)随即移动,裁剪和缩放;

缩放:

注意:传入参数的形式是一个list,[32,32]。

裁剪:

还可以加白噪声。

(4)GAN。

4.数据增强对模型表现有帮助,但不会提高太多。

p65:1.presentation/word embedding:将序列数据转换成数值数据,因为pytorch没有string数据类型,都是数值类型。

2.:第一个参数表示序列长度(如词语长度),第二个参数表示每个词的表示方法(即用几维向量表示)。

3.word embedding方法有:(1)one-hot encoding;

缺点:维度高,稀疏,无法表示语义间的关系(相关,相反等)。

(2)word2vec;

(3)glove。

4.批量embedding的两种形式:


(未完,待续~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值