毕业设计week2

Part 1 视频学习

视频1 卷积神经网络

卷积神经网络的应用

分类、检索、检测、分割
人脸识别(face recognition) DR-GAN
人脸表情识别(分类任务)
图像生成 1.image to image 2.text to image(CVPR 2018)
图像风格转化
自动驾驶

传统神经网络VS卷积神经网络

深度学习三部曲

Step1:Neural Network
Step2:Cost Function
Step3:Optimization
  1. 搭建神经网络结构
  2. 找到一个合适的损失函数
    交叉熵损失(cross entropy loss) 均方误差(MSE)
  3. 找到一个合适的优化函数,更新参数
    反向传播(BP) 随机梯度下降(SGD)

损失函数
给定W,可以由像素映射到类目得分
损失函数是用来衡量吻合度的
可以调整参数/权重W,使得映射的结果和实际类别吻合
在这里插入图片描述
全连接网络处理图像的问题

  • 参数太多:权重矩阵的参数太多->过拟合

卷积神经网络的解决方式

  • 局部关联,参数共享

卷积

卷积是对两个实变函数(以实数为自变量的函数)的一种数学操作。
一维卷积
二维卷积
对应位置相乘再求和
基本概念
input:输入
kernel/filter:卷积核/滤波器
weights:权重
kernel中的每个值叫weights
receptive field:感受野
当前正在与kernel进行计算的部分叫receptive field
activation map/feature map:特征图
经过一次卷积以后,所输出的结果的图
padding(零填充时使用)
depth/channel:深度(feature map的厚度,和filter的个数保持一致)
– output:输出
– stride:步长(kernel每次移动的步长)
输出特征图的大小(N:这是一给N * N的图,kernel大小为F * F)
– (N - F) / stride + 1 (未加padding)
– 有padding时,(N + padding * 2 - F) / stride + 1

池化

Pooling

  • 保留了主要特征的同时减少参数和计算量,防止过拟合,提高模型泛化能力。
  • 它一般处于卷积层与卷积层之间,全连接层与全连接层之间。

Pooling的类型

  • Max Pooling:最大值池化(分类更倾向于最大值池化)
    在filter大小内选择最大的一个值
  • Average pooling:平均池化
    在filter大小内选择filter大小内的平均值

全连接层通常在卷积神经网络的尾部

AlexNet

激活函数
Sigmoid函数与ReLU函数
ReLU的优点

  • 解决了梯度消失的问题(在正区间)
  • 计算速度特别快,只需要判断输入是否大于0
  • 收敛速度远快于Sigmoid

DropOut(随机失活)(从减少参数量来考虑)
训练时随机关闭部分神经元,测试时整合所有神经元。
AlexNet分层分析
第一次卷积:卷积 - ReLU - 池化
第二次卷积:卷积 - ReLU - 池化
第三次卷积:卷积 - ReLU
第四次卷积:卷积 - ReLU
第五次卷积:卷积 - ReLU - 池化
第六次卷积:全连接 - ReLU - DropOut
第七层卷积:全连接 - ReLU - DropOut
第八层卷积:全连接 - SoftMax

ZFNet

网络结构与AlexNet相同
卷积层的感受野和滤波器个数有所改变

VGG

VGG使用了更小的filter,更深的网络。
VGGNet有16—19层网络,它的滤波器是33卷积滤波器和22的大池化层。
层叠很多的小滤波器的视野和一个大的滤波器的感受野是相同的,还能减少参数,同时拥有更深的网络结构。

GoogleNet

GoogLeNet是在2014年被提出的,现在进化到了v4版本。它采取了比VGGNet更深的网络结构,一共有22层,但是参数比AlexNet少了12倍,同时有很高的计算效率,因为他采用了一种Inception的模块,而且它没有全连接层。
Inception模块设计了一个局部的网络拓扑结构,然后将这些模块堆叠在一起形成一个抽象层网络结构。具体来说就是运用几个并行的滤波器对输入进行卷积和池化,这些滤波器有不同的感受野,最后将输出的结果按深度拼接在一起形成输出层。
在这里插入图片描述
在这里插入图片描述
几种网络的介绍

视频2

解决当网络层次深度加深时,网络出现退化的现象(深度的网络学习能力应该由于浅层的网络,但是网络层数增大到50层以上后,深度的网络的准确度还不如浅层的网络,这种现象不是过拟合产生的,而是网络的退化)。
深度足够深,CNN可以拟合任何一个函数。
ResNet核心是残差学习。
要拟合H(x),但由于网络退化,很难拟合H(x),所以我们训练F(x) = H(X) - x,F(x)在数学上就称为残差。
恒等映射 没有经过网络直接跨接,即x。
在这里插入图片描述

将VGG-19堆叠3 * 3的小卷积核的卷积至34层(34-layer plain),这个网络会出现退化现象,在该网络中增加恒等映射即可得到34-layer residual。
Bottle neck ResNet的层数超过50层以后,block就会采用Bottle neck
在这里插入图片描述

Global Average Pooling 将通道变为一个数字(求平均值),可替代全连接层,更少的参数,更少的出现过拟合。
Batchnormalization

Part 2 代码

MNIST数据集

torchvision.transforms.compose()

batch_size
即一次训练所抓取的数据样本数量;batch_size的大小影响训练速度和模型优化。同时按照以上代码可知,其大小同样影响每一epoch训练模型次数。
batch_size的三个作用

  • 内存利用率(只要能跑就行)
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。但是盲目加大导致达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
  • 一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。但是Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。也就说容易陷入局部最优(也可以理解为如果batch_size很大会导致学习到的特征偏向于整体特征,学习到的内容不够)

在这里插入图片描述

shuffle:是否进行随机打乱顺序的操作。
transforms.normalize():进行归一化计算
plt.axis(‘off’)
在这里插入图片描述
data.view相当于numpy中的resize(),用法不同
torch.view()

import torcha = torch.arange(0,20)	#此时a的shape是(1,20)
a.view(4,5).shape		#输出为(4,5)
a.view(-1,5).shape		#输出为(4,5)
a.view(4,-1).shape		#输出为(4,5)

CNN-CIFAR 10

nn.moduel()
nn.Conv2d()
pytorch常见损失函数
pytorch中的forward函数
pytorch中的backward函数

img = img / 2 + 0.5     # 转换到 [0,1] 之间

VGG-CIFAR 10

什么时候用SGD什么时候用Adam
self.cfg
nn.BatchNorm2d()
nn.MaxPool2d()
optimizer.step ()是优化器对x的值进行更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值