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日

相关文章

  • 人工智能,丹青圣手,全平台(原生/Docker)构建Stable-Diffusion-Webui的AI绘画库教程(Python3.10/Pytorch1.13.0)

    世间无限丹青手,遇上AI画不成。最近一段时间,可能所有人类画师都得发出一句“既生瑜,何生亮”的感叹,因为AI 绘画通用算法Stable Diffusion已然超神,无需美术基础,也不用经年累月的刻苦练习,只需要一台电脑,人人都可以是丹青圣手。 本次我们全平台构建基于Stable-Diffusion算法的Webui可视化图形界面服务,基于本地模型来进行AI绘画…

    2023年4月5日
    00
  • pytorch中使用tensorboard

    完整代码见我的githubpytorch handbook官方介绍tensorboard官方turtorial 显示图片 cat_img = Image.open(‘cat.jpg’) transform = transforms.Compose([ transforms.Resize(224), transforms.CenterCrop(224), tr…

    PyTorch 2023年4月8日
    00
  • pytorch 两个GPU同时训练的解决方案

    在PyTorch中,可以使用DataParallel模块来实现在多个GPU上同时训练模型。在本文中,我们将介绍如何使用DataParallel模块来实现在两个GPU上同时训练模型,并提供两个示例,分别是使用DataParallel模块在两个GPU上同时训练一个简单的卷积神经网络和在两个GPU上同时训练ResNet模型。 使用DataParallel模块在两个…

    PyTorch 2023年5月15日
    00
  • pytorch 中tensor的加减和mul、matmul、bmm

    如下是tensor乘法与加减法,对应位相乘或相加减,可以一对多 import torch def add_and_mul(): x = torch.Tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) y = torch.Tensor([1, 2, 3]) y = y – x print(y)…

    PyTorch 2023年4月7日
    00
  • 60 分钟极速入门 PyTorch

    2017 年初,Facebook 在机器学习和科学计算工具 Torch 的基础上,针对 Python 语言发布了一个全新的机器学习工具包 PyTorch。 因其在灵活性、易用性、速度方面的优秀表现,经过2年多的发展,目前 PyTorch 已经成为从业者最重要的研发工具之一。 现在为大家奉上出 60 分钟极速入门 PyTorch 的小教程,助你轻松上手 PyT…

    2023年4月8日
    00
  • pytorch实现kaggle猫狗识别

    参考:https://blog.csdn.net/weixin_37813036/article/details/90718310 kaggle是一个为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台,在这上面有非常多的好项目、好资源可供机器学习、深度学习爱好者学习之用。碰巧最近入门了一门非常的深度学习框架:pytorch(如果你对p…

    2023年4月8日
    00
  • Pytorch的gather用法理解

    先放一张表,可以看成是二维数组 行(列)索引 索引0 索引1 索引2 索引3 索引0 0 1 2 3 索引1 4 5 6 7 索引2 8 9 10 11 索引3 12 13 14 15 看一下下面例子代码: 针对0维(输出为行形式) >>> import torch as t >>> a = t.arange(0,16).…

    PyTorch 2023年4月8日
    00
  • 转:pytorch 显存的优化利用,torch.cuda.empty_cache()

    torch.cuda.empty_cache()的作用 【摘自https://zhuanlan.zhihu.com/p/76459295】   显存优化 可参考: pytorch 减小显存消耗,优化显存使用,避免out of memory 再次浅谈Pytorch中的显存利用问题(附完善显存跟踪代码)  

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