使用Pytorch创建图像分类模型
#教程 #python #deeplearning #pytorch

Image description

欢迎!

在本教程中,我将指导您使用Pytorch创建一个简单的图像分类模型,Pytorch是Python中流行的深度学习库。

pron© - 条件:

  • Python安装。
  • 熟悉Python中的编程。
  • 对神经网络的基本理解。

1.Instala㧣O:

我们开始之前,请确保您已经安装了必要的软件包:

这是关于配置环境和安装Pytorch,这是一个广泛用于深度学习任务的库,而Archivion则提供用户视觉实用。

  • pytorch :实施深度学习架构(例如神经网络)的主要库。
  • torchvision :Pytorch的辅助库,可访问流行数据集,模型架构和计算视觉的图像转换。
pip install torch torchvision

2.导入库:

在使用软件包的功能之前,您需要导入它。

toch:omã³dulululopytorch的负责人。

torchvision:如前所述,这有助于专门针对计算视觉任务的数据集和模型。

变换:这提供了常见的图像转换。在深刻的学习中,输入数据通常需要起诉以提高培训效率和表现。

nn:这个母亲为神经网络提供了所有构建块。
最佳:包含常见优化算法以调整模型的模型范围。

import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.optim as optim

3.阅读并预先编程数据:

我们将使用CIFAR-10数据库,这是10堂32 x 32的60,000张彩色图像。

CIFAR-10数据库:一种众所周知的计算视图,由60,000多彩32 x 32张图像组成,涵盖10个类别。

transform.compose():链几个图像变换。在此示例中,首先将图像转换为张量,然后归一化以在-1和1之间的值。

之间。

数据加载器:协助食品批量,洗牌并并行充电,使培训过程效率更高。

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) # Normalize the images
])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)

classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

4.定义神经网络:

我们定义了一个简单的卷积神经网络结构(CNN)。

在这里,我们正在定义卷积神经网络(CNN)。 CNN是用于图像处理任务的模式神经网络类型。

nn.conv2d():表示卷积层。他等待(input_channels,output_channels,kernel_size)以及其他部分。

nn.maxpool2d():代表母亲的合并,这降低了表示的空间大小,从而使中风更加崩溃并提取了主导资源。

nn.linear():表示一个完全连接的层,该图层连接下一个层的每个神经元。

向前功能指定数据如何通过网络流动。这种流对于向前传播和反式。
至关重要。

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)   # 3 input channels, 6 output channels, 5x5 kernel
        self.pool = nn.MaxPool2d(2, 2)   # 2x2 max pooling
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)     # 10 output classes

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

5.定义损失函数和优化器:

让我们使用横向渗透丢失和SGD优化器。

交叉中心:通常用于分类任务。它衡量预测的预测性和真实类中风之间的差异。

SGD(Stocectic梯度不错):通过调整模型重量来最大程度地减少损失的全部优化。

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

6.培训网络:

在这里,让我们训练一些pocas的模型。

深度学习的本质是在模型重量调整的迭代过程中,以最大程度地减少损失:

zere梯度:当Pytorch累积梯度时,您需要在每个步骤之前清洁它们。

正向传播:通过模型传递输入以预测。

计算损失:比较预测与实际卷。
向后传播:重新传播整个网络中的损失,以计算与每个重量相关的损失梯度。

优化:调整权重以最小化损失的方向。
循环确保模型查看数据保险库(©pocas)并调整您的权重。

for epoch in range(5):   # Loop over the dataset multiple times

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data

        optimizer.zero_grad()  # Zero the parameter gradients

        outputs = net(inputs)  # Forward
        loss = criterion(outputs, labels)  # Calculate loss
        loss.backward()  # Backward
        optimizer.step()  # Optimize

        running_loss += loss.item()
        if i % 2000 == 1999:  # Print every 2000 mini-batches
            print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

7.测试网络:

训练后,评估未看到数据的模型性能至关重要:

torch.no_grad():禁用梯度的计算,这在评估期间没有必要,保存内存和计算。

输出:这些是每个类提供的概率。
预测:通过最有可能选择班级,我们获得了预期类的卷。

计算acurãia:告诉多少预测对应于实际卷并计算百分比。

在此过程结束时,您将拥有一个训练有素的神经网络模型,能够对CIFAR-10数据集进行分类。请记住,这是一个基本教程。为了提高现实世界应用的精确和效率,需要进行更高级的吨和精细的调整。

correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = outputs.max(1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))

就是这样!在短短10分钟内,您就学会了使用Pytorch创建和培训简单的图像分类模型。有了更多的时间和调整,您可以进一步改善该模型或更深入地研究建筑和先进的舌头!

嗨,我是Maik。希望您喜欢这篇文章。如果您有任何DAN或想与我联系并访问更多遏制,请关注我的频道:

LinkedIn:https://www.linkedin.com/in/maikpaixao/
Twitter:https://twitter.com/maikpaixao
Facebook:https://www.facebook.com/maikpaixao
YouTube:https://www.youtube.com/@maikpaixao
Instagram:https://www.instagram.com/prof.maikpaixao/
github:https://github.com/maikpaixao