深度学习之图像分类领域!2024.11.5-2024.11.12

讲得超级好的up主视频链接,相见恨晚系列

up讲解目录链接

up的代码

博主的记录笔记 到googLenet

卷积神经网络

深入浅出理解深度可分离卷积
包含标准卷积、逐深度卷积、逐点卷积、可分离卷积

进行图像特征提取。拥有局部感知机制,权值共享(区别于全连接神经网络,极大减少了参数量)

卷积操作中常用参数: N=(W-F+2P)/S+1

池化!

反向传播,权值更新

链式求导法则

lenet

pytorch中的tensor向量是 [n,c,h,w]

Alexnet

使用relu激活函数
使用dropout避免过拟合

卷积核relu激活函数是一起的 1. 为什么要用ReLU激活函数
由于sigmoid函数在输入远离中心点时导数会很小,会出现梯度消失的现象。使用ReLU激活函数时则不会出现梯度消失的现象。
但是当输入为负数时ReLU函数会死掉,拐点不可导。所以需要做特殊处理。
在这里插入图片描述

VGG

适用多个小卷积核来替代一个大的卷积核,保证感受野一样,但是有效减少了参数量

不同卷积核的卷积感受野不一样,提取到的信息感受野就不一样

GoolgLenet

Inception系列

一维卷积的作用

激活函数的总结
其中relu函数虽然好,但是不适用于RNNs的神经网络,要注意!

使用inception中的并行结构,可以提取不同尺寸的特征,之后按深度进行拼接!

为什么有时候是nn.relu(),有时候是F.ReLU() 效果是一样的,只是pytorch中的两套封装方法,一个类封装,一个函数封装

卷积操作,输出的特征矩阵的大小,默认是向下取整的,如果要向上取整,就需要ceil_mode=True这个参数

init函数中是定义,具体实现实在forward函数中

net.train() self.training=True
net.eval() self.training=False
辅助分类器的作用:为了避免深度增加而导致的梯度消失,训练过程中用来优化网络参数的,训练阶段优化好了,测试阶段就不用了
辅助分类器只在训练过程中起作用,有输出,在验证测试阶段,辅助分类器不起作用,

最后的loss是三个分类器的loss之和
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Resnet

一个up的笔记
内部记录有如何加载预训练好的模型进行继续训练

网络深度越深—》梯度消失、爆炸,退化问题–》模型误差越大?
对于梯度消失、爆炸 通常是对数据进行标准化,权重初始化,BN
利用残差解决了退化问题,实现网络越深,模型越好,误差越小

残差块中的实现和虚线部分

主分支和测分支的输出特征矩阵的shape必须一致
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主分支和测分支的输出特征矩阵的shape必须一致

18和34层的网络结构中conv2_X不涉及虚线残差,50层以上的conv2_1涉及到了虚线残差层,但只是改变了特征矩阵的深度,高宽不变。
conv3,4,5的卷积的第一层都有虚线残差结构, 这个结构的侧分枝改变了特征矩阵的深度和大小,为了主分支和测分支的输出特征矩阵的shape必须一致,以便进行融合。

BatchNormalizition

BN详解

让feature map满足某一分布规律,理论上是指整个训练样本集所对应feature map的数据要满足分布规律,保证每一层操作都满足一定的分布规律?

(1)训练时要将traning参数设置为True,在验证时将trainning参数设置为False。在pytorch中可通过创建模型的model.train()和model.eval()方法控制。

(2)batch size尽可能设置大点,设置小后表现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差。

(3)建议将bn层放在卷积层(Conv)和激活层(例如Relu)之间,且卷积层不要使用偏置bias,因为没有用,参考下图推理,即使使用了偏置bias求出的结果也是一样的

迁移学习

常见的迁移学习方式:
1.载入权重后训练所有参数
2.载入权重后只训练最后几层参数
3.载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层

transformer

一些编程经验

展平操作

torch.flatten(x,start_dim=1) 从第二维开始展开
x.view(-1,abc) 确保总元素数量不变
x.flatten() 在所有维度展开
new_tensor = tensor.view(*shape) shape 是一个整数元组,用于指定新的张量形状
对于numpy和panda的一些东西,不看就忘了

形参前带星号

请添加图片描述

pytorch中nn.Conv1d和nn.Conv2d的区别!

nn.Conv1d和nn.Conv2d

conv2d官网nn.conv2d()

Conv1d顾名思义只对一个维度操作,在文本中只需要从上往下进行卷积扫描即可。

input的的维度是[batch_size, max_len, embedding_dim],在开始Conv1d前需要将max_len换到最后一个维度用来做一维卷积。卷积后的结果[batch_size, out_channels, n+2p-f/s+1],
在这里插入图片描述

就是官方提供已经训练好的参数权重文件,加载到自己网络上再继续训练就行。

padding作用

在卷积操作中,padding可以避免特征矩阵越来越小,可以充分提取到边缘信息

p=(f-1)/2

卷积核大小为3,步长为1,padding为1的时候,卷积得到的特征矩阵大小和原图不变

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐