Python+Pytorch实战之彩色图片识别

Python+PyTorch实战之彩色图片识别

本文将介绍如何使用Python和PyTorch实现彩色图片识别。我们将提供两个示例,分别是使用卷积神经网络(CNN)和迁移学习(Transfer Learning)实现彩色图片识别。

1. 数据集

我们将使用CIFAR-10数据集,它包含10个类别的60000张32x32彩色图片。每个类别有6000张图片。我们将使用50000张图片作为训练集,10000张图片作为测试集。

2. 示例1:使用CNN实现彩色图片识别

以下是一个示例,展示如何使用CNN实现彩色图片识别。

2.1. 导入库

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

2.2. 加载数据集

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

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')

2.3. 定义CNN模型

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        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)

    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()

2.4. 定义损失函数和优化器

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

2.5. 训练模型

for epoch in range(2):  # 多次循环数据集

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

        optimizer.zero_grad()

        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:    # 每2000个小批量数据打印一次损失值
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

2.6. 测试模型

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

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

3. 示例2:使用迁移学习实现彩色图片识别

以下是一个示例,展示如何使用迁移学习实现彩色图片识别。

3.1. 导入库

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

3.2. 加载数据集

transform = transforms.Compose(
    [transforms.Resize(256),
     transforms.CenterCrop(224),
     transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

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')

3.3. 加载预训练模型

net = torchvision.models.resnet18(pretrained=True)
num_ftrs = net.fc.in_features
net.fc = nn.Linear(num_ftrs, 10)

3.4. 定义损失函数和优化器

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

3.5. 训练模型

for epoch in range(2):  # 多次循环数据集

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

        optimizer.zero_grad()

        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:    # 每2000个小批量数据打印一次损失值
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

3.6. 测试模型

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

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

4. 总结

本文介绍了如何使用Python和PyTorch实现彩色图片识别。我们提供了两个示例,分别是使用CNN和迁移学习实现彩色图片识别。在实现过程中,我们使用了CIFAR-10数据集,并对数据进行了预处理。我们还介绍了如何定义模型、损失函数和优化器,并进行了训练和测试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+Pytorch实战之彩色图片识别 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • OpenCV加载Pytorch模型出现Unsupported Lua type 解决方法

    原因 Torch有两个版本,一个就叫Torch一个专门给Python用的Pytorch,它们训练完之后保存下来的模型是不一样的.说到这问题就很清楚了.OpenCV的ReadNetFromTorch支持的是前者… 解决方法 那么有没有解决办法呢,答案是有的.PyTorch支持把模型保存为ONNX格式.而这个格式在opencv是支持的.操作如下: impor…

    PyTorch 2023年4月8日
    00
  • Pytorch 加载保存模型,进行模型推断【直播】2019 年县域农业大脑AI挑战赛—(三)保存结果

    在模型训练结束,结束后,通常是一个分割模型,输入 1024×1024 输出 4x1024x1024。 一种方法就是将整个图切块,然后每张预测,但是有个不好处就是可能在边界处断续。   由于这种切块再预测很ugly,所以直接遍历整个图预测(这就是相当于卷积啊),防止边界断续,还有一个问题就是防止图过大不能超过20M。 很有意思解决上边的问题。话也不多说了。直接…

    2023年4月6日
    00
  • pytorch 手写数字识别项目 增量式训练

    dataset.py   ”’ 准备数据集 ”’ import torch from torch.utils.data import DataLoader from torchvision.datasets import MNIST from torchvision.transforms import ToTensor,Compose,Normalize…

    PyTorch 2023年4月8日
    00
  • pytorch1.0 用torch script导出模型

    python的易上手和pytorch的动态图特性,使得pytorch在学术研究中越来越受欢迎,但在生产环境,碍于python的GIL等特性,可能达不到高并发、低延迟的要求,存在需要用c++接口的情况。除了将模型导出为ONNX外,pytorch1.0给出了新的解决方案:pytorch 训练模型 – 通过torch script中间脚本保存模型 — C++加载…

    PyTorch 2023年4月8日
    00
  • PyTorch–>torch.max()的用法

                   _, predited = torch.max(outputs,1)   # 此处表示返回一个元组中有两个值,但是对第一个不感兴趣 返回的元组的第一个元素是image data,即是最大的值;第二个元素是label,即是最大的值对应的索引。由于我们只需要label(最大值的索引),所以有 _ , predicted这样的赋值语句…

    2023年4月6日
    00
  • 贝叶斯个性化排序(BPR)pytorch实现

    一、BPR算法的原理: 1、贝叶斯个性化排序(BPR)算法小结https://www.cnblogs.com/pinard/p/9128682.html2、Bayesian Personalized Ranking 算法解析及Python实现https://www.cnblogs.com/wkang/p/10217172.html3、推荐系统中的排序学习ht…

    2023年4月8日
    00
  • Pytorch可视化的几种实现方法

    PyTorch是一个非常流行的深度学习框架,它提供了许多工具来帮助我们可视化模型和数据。在本文中,我们将介绍PyTorch可视化的几种实现方法,包括使用TensorBoard、使用Visdom和使用Matplotlib等。同时,我们还提供了两个示例说明。 使用TensorBoard TensorBoard是TensorFlow提供的一个可视化工具,但是它也可…

    PyTorch 2023年5月16日
    00
  • pytorch in vscode (Module ‘xx’ has no ‘xx’ member pylint(no-member))

    在VSCode setting中搜索python.linting.pylintPath改为pylint的路径,如/home/xxx/.local/lib/python3.5/site-packages/pylint

    PyTorch 2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部