Datawhale AI 夏令营 Task02 笔记

Task2:从baseline入门深度学习

一、深度学习是什么?

        深度学习(Deep Learning)是机器学习的一个分支,它使用神经网络模拟人脑的学习方式,从大量数据中自动学习和提取特征,进行预测和决策。

        神经网络由多个神经元组成,神经元就像人体大脑中的微小开关,能够接收来自其他神经元的信号,并根据这些信号的产生反应。

        在人工智能中,我们用数学模型来模拟这种生物神经元的行为。

        一个简单的神经元模型包括输入、权重、激活函数和输出。

                输入就像神经元 树突 接收到的信号,

                权重则像是调整信号强度的小调节器,

                激活函数决定是否产生输出,

                而输出则是传递给其他神经元的信号

        有多个基本的神经元模型通过不同的方式组合起来,形成了多层次的网络结构。这些网络,我们称之为神经网络,它们能够在各个层次上处理和传递信息,就像大脑中的神经回路一样。

二、深度学习是如何训练的?        

        深度学习是通过梯度下降训练的。

        梯度下降是一种优化算法,用于最小化函数。梯度下降算法基于这样一个原理:损失函数的梯度指向函数增长最快的方向。因此,如果我们希望减少损失函数的值,我们就需要沿着梯度的反方向调整模型的参数。

        这样,每次迭代都会朝着使得损失函数减小的方向移动。

        损失函数指的是模型所产生的预测值和实际值之间的差距,这个值越小,代表模型的预测值越准确。

        1.优化过程

        在训练循环中,我们首先加载一小批量数据,将其输入到神经网络中进行前向传播,计算出网络的输出。然后,我们使用损失函数来计算当前批次的损失,并通过反向传播算法计算损失函数关于每个参数的梯度。这些梯度告诉我们如何调整权重和偏置以减少损失。

        当数据集过大而导致计算机内存不足以一次性处理这些数据数据时,我们可以通过将数据分成小批量,我们可以更频繁地更新模型参数,这使得训练过程更加高效。

        2.Task1 的训练代码

def train(train_loader, model, criterion, optimizer, epoch):

    # switch to train mode
    model.train()

    end = time.time()
    for i, (input, target) in enumerate(train_loader):
        input = input.cuda(non_blocking=True)
        target = target.cuda(non_blocking=True)

        # compute output
        output = model(input)
        loss = criterion(output, target)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        首先,我们需要准备一批图片数据(通过train_loader)和这些图片对应的正确标签(target)。

        在开始训练之前,将模型设置为训练模式( model.train() ),这样模型就知道现在是学习时间了。

        接着,开始喂给模型图片数据,并让它尝试预测这些图片的内容。

        模型会基于它目前的学习给出预测结果(output),而会计算这些预测结果与实际标签之间的差异,这个差异就是损失(loss)。

        为了让模型学会准确预测,需要指出它的错误,并更新它的内部参数来减少这些错误(通过loss.backward()optimizer.step())。

        这个过程就像是模型在自我调整,以便在下一次遇到类似图片时能够做出更准确的预测。

 

三、深度学习与迁移学习

        迁移学习是一种机器学习技术,它将已在一个任务上学到的知识(如模型参数、特征表示等)应用到另一个相关任务上,它允许模型在数据稀缺的情况下也能表现出色。

        迁移学习的实现方法

        迁移学习一种策略是通过微调方式实现

        微调的过程通常开始于选择一个在大型数据集上预训练的模型,我们需要做的就是将这个预训练模型适配到新的目标任务上。通常涉及以下步骤:

        1.替换模型的输出层,以匹配目标任务的类别数量和类型。

        2.(可选)冻结预训练模型中的部分层,防止在微调过程中这些层学到的通用特征被破坏。

        3.使用目标任务的数据集对模型进行训练。在这个过程中,用梯度下降等优化算法更新模型的权重,从而使模型能够更好地适应新的任务。训练时,可能会使用比预训练时更低的学习率,以避免过度拟合目标数据集。

        Task1 的迁移学习代码

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

   代码中timm.create_model('resnet18', pretrained=True, num_classes=2)这行代码就是加载了一个预训练的ResNet-18模型。

   pretrained=True表示使用在ImageNet数据集上预训练的权重。

   num_classes=2表示模型的输出层被修改为有2个类别的输出,以适应二分类任务(例如区分真实和Deepfake图像)。

        通过model = model.cuda()将模型移动到GPU上进行加速。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值