李哥深度学习(三)分类任务

零、上节课学到了什么?

1、“神器”nn.linear,通过nn.linear(A,B)可以把数据从A维度转换到B维度

一个(16,4)的矩阵(表示16条数据每个数据有四个参数)经过nn.linear(4,1)会转化为(16,1).

2、梯度下降算法,SGD(随机梯度下降),通过沿着损失函数梯度的反方向更新参数来逐步逼近最优解,每次迭代使用一个小批量的数据样本

相对于标准梯度下降,提高了参数更新的稳定性,又加快了收敛速度

缺点是对学习率敏感:选择合适的学习率至关重要。如果学习率过高,可能会跳过最优点;如果太低,则会显著增加训练时间。

优化方法:通过加入动量项加速SGD,并且有助于减少方差。动量考虑了之前梯度的方向,使得更新方向更加稳定,尤其是在遇到局部极小值或鞍点时能够更快地“滚动”出来

optim.SGD(model.parameters(), lr=config["lr"], momentum=config["momentum"])

目前流行的Adam(Adaptive Moment Estimation自适应矩估计)通过计算梯度的第一时刻估计(均值)和第二时刻估计(未中心化的方差)为每个参数计算自适应的学习率。

一、如何做分类的输出?

可以用linear(4,1)输出成一个数,根据数的大小来分类么?

不能,因为对于分类的每个项的权重是相当的,pred_y=0.4对于y=1和y=4这两个分类来说不应该存在远近关系

要采用独热编码来进行分类

图片输入模型,经过linear(?,3)生成一个三维向量,跟分类项的独热编码通过交叉熵损失函数来得到loss(不能用回归任务里的MSE/MAE等损失函数了,因为这是三个值和三个值之间的对比)预测值表示的是概率分布。

二、如何做模型的输入

卷积神经网络,卷积层通过滑动一个或多个卷积核遍历整个输入空间,并对每个位置进行点乘运算来生成特征图。原始特征图和新特征图,和卷积核的深度有什么关系?

特征图有多少个通道/层数、卷积核就要有多少层数

一个卷积层是什么? 卷积核的参数量如何计算?

一个特征图通过卷积核卷积,得到新的特征图,这个过程被称为一层卷积。

卷积核的参数量计算

OUT=\frac{\left ( IN-K+2P \right )}{S}+1,其中,out是输出尺寸,IN是输入尺寸,k(kernal)是卷积核尺寸,P是padding,S(stride)是步长,向上取整。

如何缩小输出尺寸?扩大步长可能会丢失信息,采用池化(pooling)。

特性最大池化 (Max Pooling)平均池化 (Average Pooling)
主要作用突出显著特征,增强模型对重要特征的关注平滑特征图,抑制极端值,保留背景信息
噪声鲁棒性对噪声有一定的鲁棒性对噪声敏感
非线性非线性操作线性操作
计算量
适用场景更适合用于检测显著特征的任务,如边缘检测、物体识别更适合用于需要保留整体结构的任务,如图像分类,对绘画风格等整体特征能更好识别

通过多次卷积和池化层的结合,逐步改变特征图的尺寸

例如3 * 224*224——(64个3*3*3卷积核,padding=1)——> 64*224*224 ——(128个64*3*3卷积核,padding=1)——>(128 * 224*224)——(maxpooling(2))——>128*112*112 ——(256个128*3*3卷积核,padding=1)——(maxpooling(2))——> 256*56*56 ——(512个256*3*3卷积核,padding=1)——(maxpooling(2))——> 512 * 28*28——(1024个512*3*3卷积核,padding=1)——(maxpooling(2))——> 1024 * 14*14 ——(maxpooling(2))——>1024*7*7

三、怎么卷出来一个类别呢

将卷积的特征图展平(flatten)并通过全连接神经网络输出为待分类别维数的张量

四、loss?

输出的pred_y各项的和不为1,如何表示分类概率?

通过softmax激活函数,将一个K维的实数向量映射为另一个K维的概率分布向量,使得每个元素都在[0,1]范围内,并且所有元素之和为1。nn.softmax()

交叉熵损失函数

CrossEntropy loss

关于信息熵 ,KL散度,交叉熵,一文读懂(bushi)。_分布的信息熵-优快云博客

预测的分布即FC输出的结果,真实值下标即按分类传入【0,1,2,3,。。。。】

五、经典图片数据集

MNIST数据集(手写数字识别)

cifar10(分十类,经典的小图片数据集)

imagenet(最大、最出名、有百万级别的照片量,1024类)

coco(除标签外包含一些对图片的描述)

六、经典神经网络

Sota 模型。 Sota: the state of the art(可以理解为对模型效果的评价,相当于行业黑话,最好、最先进的模型的意思)

  • 经典神经网络 AlexNet:AlexNet有6亿个参数和650,000个神经元,包 含5个卷积层,有些层后面跟了max-pooling层, 3个全连接层 (创新点: relu。 drop out。 池化 归一化)                   归一化:各个数据项减去均值除以标准差,统一量纲,避免某些数值过大的参数对模型造成过大影响,它可以让模型关注数据的分布,而不受数据量纲的影响。 归一化可以 保持学习有效性, 缓解梯度消失和梯度爆炸。
    from torchvision import models
    
    model = models.alexnet()
    print(model)
    
    
    
    #AlexNet(
      (features): Sequential(
        (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))
        (1): ReLU(inplace=True)
        (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
        (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
        (4): ReLU(inplace=True)
        (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
        (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (7): ReLU(inplace=True)
        (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (9): ReLU(inplace=True)
        (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (11): ReLU(inplace=True)
        (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
      )
      (avgpool): AdaptiveAvgPool2d(output_size=(6, 6))
      (classifier): Sequential(
        (0): Dropout(p=0.5, inplace=False)
        (1): Linear(in_features=9216, out_features=4096, bias=True)
        (2): ReLU(inplace=True)
        (3): Dropout(p=0.5, inplace=False)
        (4): Linear(in_features=4096, out_features=4096, bias=True)
        (5): ReLU(inplace=True)
        (6): Linear(in_features=4096, out_features=1000, bias=True)
      )
    )

    pool(3,2)是三个一poll,但每次走两步

  • VGGNet:用两个更小的卷积核代替大的卷积核、加深了网络
  • 这样做的好处:在感受野相同的情况下,串联的小卷积核有更少的参数量,更多的非线性变换(多次激活函数),对特征的学习能力更强用两个3*3的卷积核代替了一个5*5的卷积核
  • ResNet (创新: 1乘1卷积和残差连接)
  • 残差连接,改善梯度消失的情况,可以把模型做到很深
  • 1*1卷积,减少参数量
  • 用1*1卷积实现残差连接

七、卷积和全连接的关系

卷积是一种参数共享的不全连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值