【无标题】

本文介绍了如何在PyTorch中进行模型训练和验证。通过定义`train_one_epoch`函数进行训练,包括损失函数、反向传播和优化器的使用。同时,给出了验证函数`evaluate`来计算准确率和平均损失。整个过程涉及到了数据加载、模型切换模式以及性能评估。
摘要由CSDN通过智能技术生成

目录

前言

一、要解决的问题 ?

二、如何做

1.训练模型

2.验证函数

总结



前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、要解决的问题 ?

基于pytorch的模型训练过程。

要解决的问题 

二、如何做

1.训练模型

定义一个用于训练和验证过程的的函数

def train_one_epoch(model, optimizer, data_loader, device, epoch):
    model.train()
    # 定义损失函数
    loss_function = torch.nn.CrossEntropyLoss()
    mean_loss = torch.zeros(1).to(device)
    # 梯度清零
    optimizer.zero_grad()


    for step, data in enumerate(data_loader):
        images, labels = data
        # 前向传播
        pred = model(images.to(device))

        loss = loss_function(pred, labels.to(device))
        # 反向传播
        loss.backward()
        
        mean_loss = (mean_loss * step + loss.detach()) / (step + 1)  # update mean losses
   
        # 优化
        optimizer.step()
        # 梯度清零
        optimizer.zero_grad()

    return mean_loss.item()

 在main函数中就可以调用该训练函数了,使用该函数前确保,要传入5个参数

# 准备好数据,其中ImageDataset是自定义数据集的加载方式,要实现 __init__   __len__     __getitem__这三个类方法
train_set = ImageDataset(train_data, transform=data_transform["train"])
train_loader = torch.utils.data.DataLoader(train_set,
                                               batch_sampler=train_batch_sampler,
                                               pin_memory=True,
                                               num_workers=nw,
                                               collate_fn=train_set.collate_fn)
# 实例化了model
optimizer = optim.SGD(pg, lr=args.lr, momentum=0.9, weight_decay=0.005)
# 是CPU、GPU、还是单机多卡
device = torch.device(args.device)
# 训练周期
epoch = 100

2.验证函数

分类网络中、计算性能指标:例如准确率的代码如下(示例):该函数返回多少个预测正确的个数

损失是用来衡量模型在验证集上的拟合程度或误差大小的指标,是一种常见做法,通过计算损失,你可以获得模型在验证集上的损失值,以进一步评估模型的性能。

# 表示梯度不再更新, 上下文管理器关闭梯度计算以加快推理速度
@torch.no_grad()

def evaluate(model, data_loader, device):
    # 将模型设为评估模式
    model.eval()
    total_samples = 0    # 累计总样本数
    loss_function = torch.nn.CrossEntropyLoss()

    # 用于存储预测正确的样本个数
    sum_num = torch.zeros(1).to(device)    # acc = 0.0

    for step, data in enumerate(data_loader):
        images, labels = data
        pred = model(images.to(device))
        loss = loss_function(pred, labels)
        total_loss += loss.item() * images.size(0)
        total_samples += images.size(0)    # 对当前批次中的样本数量,在不同批次中进行累加

        pred = torch.max(pred, dim=1)[1]
        sum_num += torch.eq(pred, labels.to(device)).sum()
        

     avg_loss = total_loss / total_samples
    return sum_num.item() avg_loss

在main()函数中,要知道 "验证集中的样本总数"才能算准确率

注意:images是一个形状为 (batch_size, channels, height, width) 的四维张量,张量对象有一个 size() 方法,它返回张量在每个维度上的大小。我想获得当前批次中样本的数量,即batch_size

sum_num ,avg_loss = evaluate(model=model,
                           data_loader=val_loader,
                           device=device)

acc = sum_num / val_sampler.total_size

总结

以上就是有关训练和验证模型的内容,侵权立删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值