DataWhale夏令营第二期-CV方向Task2笔记

一、了解深度学习

1.神经网络

        在上一期的笔记中,我们可以了解到,深度学习是机器学习的一个分支。深度学习依赖于深层神经网络,模拟人脑进行学习。

        神经网络由众多神经元连接而成,每个神经元又由输入、权重、激活函数、输出而组成。如同人脑中的神经元一样,神经网络中的神经元接收前一个神经元传递过来的输入信号,通过权重方法或是缩小这一信号,再由激活函数控制神经元是否输出信号,也就是提供非线性,最终输出信号传递到下一个神经元。

        所以在深度学习中,神经网络只是比机器学习中的更加深罢了。通过更深的神经网络,深度学习模型能够适应更为复杂的任务,提取到更深层级的特征信息。

2.通过Pytorch进行深度学习模型训练

(1)梯度下降

        在深度学习中,我们想要优化深度学习模型,首先就需要一个目标函数来代表模型的误差,称为损失函数。在深度学习的训练过程中,我们的目标就是不断降低损失函数,直至最损失函数达到最小值。

        在函数图像中,梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。

        在模型的每一次训练迭代过程中,模型不断读取一个BatchSize的批量数据,并通过前向传播和反向传播,传递梯度。

二、迁移学习

        深度学习发展至今,模型的参数量,训练的数据量不断增大,所需要的训练时间也被大大加长。在这样的训练条件下,模型随之而来的也获得了更强大的特征提取能力与泛化性。

        在计算机视觉领域的发展中,ImageNet具有不可忽视的作用,因为ImageNet数据集的数据量之大在当时前所未有,为计算机视觉领域的后续发展奠定地位。现在我们也能够在timm、huggingface库中看到大量的ImageNet预训练模型。

        在这些具有强大泛化能力的预训练模型的帮助下,我们可以在这些预训练模型的基础上进行微调,将其他领域的特征提取能力迁移到我们的任务所需的下游领域,这就是迁移学习。

        在我们的官方Baseline中,模型就是通过如下代码读取timm库中的预训练权重进行迁移学习微调的,我们所要做的修改就是修改分类头的输出数,也就是分类所需的类数。

import timm
model = timm.create_model('efficientnet_b0', pretrained=True, num_classes=2)

        不仅是分类模型,我们也可以通过预训练模型提取图像特征,将分类头换成检测头,或直接对骨干网络输出特征进行Sigmoid的方法进行下游检测、分割任务的迁移。由于预训练模型的强大泛化能力,我们可以通过微调大大减少模型的训练时间,提高模型的精度。

        近些年,我们能够看到很多优秀的工作通过迁移学习以及高效微调,冻结部分预训练Encoder进行训练的方法,从预训练模型中获得强大的下游任务特征提取能力。

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值