使用PyTorch中的深度网络训练自定义数据集教程

释放双眼,带上耳机,听听看~!
本教程介绍如何使用PyTorch中的自带深度网络训练自定义数据集,包括目录式读取数据、超参数设置和图像分类。

前言

  在本文里将为大家带来如何进行使用pytorch中的自带的深度网络进行训练自己的数据。本文讲解可分两部分,第一部分为大家介绍如何进行目录式的读取自己的数据;第二部分为大家介绍如何进行更改为其他网络进行调试。(alexnetdensenetmnasnetmoblienetresnetshufflenetsqueezenetvgg)

目录式读取

  由于大家在做图像分类的时候,一般是往把搜集到的同类图像放置在同一个文件夹内,因此我们在这里采用目录式读取自己制作的数据集进行训练网络。

数据组成:

使用PyTorch中的深度网络训练自定义数据集教程
使用PyTorch中的深度网络训练自定义数据集教程

  在这里我采用鲜花数据集为基础数据集并对此数据集进行修改。在鲜花数据集中我们确定总数据类别为5类,在训练集中每一类中的图像数为500涨,在测试集中的每一类的图像数为150张,对训练测试内的图像进行修改大小为224x224x3。

  参考pytorch官网示例,我们可以将示例修改进行如下修改:

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader


train_root = './datas/train/'
test_root = './datas/test/'
# 将文件夹的内容载入dataset
train_dataset = torchvision.datasets.ImageFolder(root=train_root, transform=torchvision.transforms.ToTensor())
test_dataset = torchvision.datasets.ImageFolder(root=test_root, transform=torchvision.transforms.ToTensor())

train_dataloader = DataLoader(train_dataset, batch_size=64)
test_dataloader = DataLoader(test_dataset, batch_size=64)

  这这一步的时候我们可捎带的将超参数进行设置一下,如下设置:

learning_rate = 0.1
batch_size = 64
epochs = 100
# Initialize the loss function
loss_fn = nn.CrossEntropyLoss()

  由于训练集是需要训练而测试集不需要进行训练,那么可参考官网的示例分别对训练集的操作和测试集的操作保持不变如下:

def train_loop(dataloader, model, loss_fn, optimizer):
    size = len(dataloader.dataset)
    for batch, (X, y) in enumerate(dataloader):
        # Compute prediction and loss
        pred = model(X)
        loss = loss_fn(pred, y)

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

        if batch % 100 == 0:
            loss, current = loss.item(), batch * len(X)
            print(f"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]")


def test_loop(dataloader, model, loss_fn):
    size = len(dataloader.dataset)
    num_batches = len(dataloader)
    test_loss, correct = 0, 0

    with torch.no_grad():
        for X, y in dataloader:
            pred = model(X)

            test_loss += loss_fn(pred, y).item()
            correct += (pred.argmax(1) == y).type(torch.float).sum().item()

    test_loss /= num_batches
    correct /= size
    print(f"Test Error: n Accuracy: {(100 * correct):>0.1f}%, Avg loss: {test_loss:>8f} n")

更改网络

  在pytorch的自带网络大家可与自行将复制出来,这样可与避免因自己的更改导致后续因为再次使用出现不必要的BUG,pytorch自带的models路径为:

   envspytorchLibsite-packagestorchvisionmodels

使用PyTorch中的深度网络训练自定义数据集教程

  大家可与设置model为自己需要调用的网络,在这里我们以vgg网络系列的vgg11为例子为大家介绍如何进行训练网络。我们依旧保持官网示例中的SGD训练函数作为optimizer,然后将各参数导入到train和test中进行训练自己的数据。由于网络比较多,我在这里就不一一为大家介绍了。

  大家可与移步我的Github

使用PyTorch中的深度网络训练自定义数据集教程

from myNets.vgg import vgg11  # 可更换为其他

if __name__ == "__main__":
    model = vgg11(num_classes=5)  # 可更换为其他
    optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
    for t in range(epochs):
        print(f"Epoch {t + 1}n-------------------------------")
        train_loop(train_dataloader, model, loss_fn, optimizer)
        test_loop(test_dataloader, model, loss_fn)
    print("Done!")

拓展

  在上一期:【实操】涨点神器你还不会,快点进来学习Label Smooth我们介绍了Label Smooth操作,大家可与尝试自行更改进行综合比对测试使用不同的Label Smooth操作对结果的影响,也可更换其他的学习率的衰减函数进行测试。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

多核处理器系统中的NUMA架构与绑核技术

2023-12-20 16:04:14

AI教程

SAM图像分割模型与IA图像修补模型的应用与介绍

2023-12-20 16:19:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索