iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Pytorch深度学习之图像分类器
  • 385
分享到

Python Pytorch深度学习之图像分类器

2024-04-02 19:04:59 385人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、简介二、数据集三、训练一个图像分类器1、导入package吧2、归一化处理+贴标签吧3、先来康康训练集中的照片吧4、定义一个神经网络吧5、定义一个损失函数和优化器吧6、训练网

一、简介

通常,当处理图像、文本、语音或视频数据时,可以使用标准python将数据加载到numpy数组格式,然后将这个数组转换成torch.*Tensor

  • 对于图像,可以用Pillow,OpenCV
  • 对于语音,可以用scipy,librosa
  • 对于文本,可以直接用Python或Cython基础数据加载模块,或者用NLTK和SpaCy

特别是对于视觉,PyTorch已经创建了一个叫torchvision的package,该报包含了支持加载类似Imagenet,CIFAR10,MNIST等公共数据集的数据加载模快torchvision.datasets和支持加载图像数据数据转换模块torch.utils.data.DataLoader。这提供了极大地便利,并避免了编写“样板代码”

二、数据集

对于本小节,使用CIFAR10数据集,它包含了是个类别:airplane,automobile,bird,cat,deer,dog,frog,horse,ship,truck。CIFAR10中的图像尺寸是33232,也就是RGB的3层颜色通道,每层通道内的尺寸为32*32

三、训练一个图像分类器

训练图像分类器的步骤

  • 使用torchvision加载并且归一化CIFAR10的训练和测试数据集
  • 定义一个卷积神经网络
  • 定义一个损失函数
  • 在训练样本数据上训练网络
  • 在测试样本数据上测试网络

1、导入package吧


# 使用torchvision,加载并归一化CIFAR10
import torch
import torchvision
import torchvision.transfORMs as transforms

2、归一化处理+贴标签吧


# torchvision数据集的输出是范围在[0,1]之间的PILImage,将他们转换成归一化范围为[-1,1]之间的张量Tensor
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=False,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=False,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、先来康康训练集中的照片吧


# 展示其中的训练照片
import matplotlib.pyplot as plt
import numpy as np
# 定义图片显示的function
def imshow(img):
    img=img/2+0.5
    npimg=img.numpy()
    plt.imshow(np.transpose(npimg,(1,2,0)))
    plt.show()
# 得到随机训练图像
dataiter=iter(trainloader)
images,labels=dataiter.next()
# 展示图片
imshow(torchvision.utils.make_grid(images))
#打印标签labels
print(' '.join("%5s"%classes[labels[j]] for j in range(4)))

运行结果

在这里插入图片描述

在这里插入图片描述

注:初学的猿仔们如果Spyder不显示图片,自己设置一下就OK,在Tools——>Preferences中设置如下:

在这里插入图片描述

4、定义一个神经网络吧

此处,复制前一节的神经网络(在这里),并修改为3通道的图片(之前定义的是1通道)


#%%
# 定义卷积神经网络
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        # 1个输入,6个输出,5*5的卷积
        # 内核
        self.conv1=nn.Conv2d(3,6,5)#定义三个通道
        self.pool=nn.MaxPool2d(2,2)
        self.conv2=nn.Conv2d(6,16,5)
        # 映射函数:线性——y=Wx+b
        self.fc1=nn.Linear(16*5*5,120)#输入特征值: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()

Tips:在Spyder中可用使用“#%%”得到cell块,之后对每个cell进行运行,快捷键(Ctrl+Enter)——>我太爱用快捷键了,无论是什么能用键盘坚决不用鼠标(是真的懒吧!!!)

5、定义一个损失函数和优化器吧

使用分类交叉熵Cross-Entropy做损失函数,动量SGD做优化器


#%%
# 定义一个损失函数和优化器
import torch.optim as optim
criterion=nn.CrossEntropyLoss()
optimizer=optim.SGD(net.parameters(), lr=0.001,momentum=0.9)

6、训练网络吧

此处只需要在数据迭代器上循环输入网络和优化器


#%%训练网络
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:
            print('[%d,%5d] loss: %.3f'%(epoch+1,i+1,running_loss/2000))#每2000个输出一次
print('Finished Training')

运行结果

在这里插入图片描述

7、在测试集上测试一下网络吧

已经通过训练数据集对网络进行了两次训练,但是我们需要检查是否已经学到了东西。将使用神经网络的输出作为预测的类标来检查网络的预测性能,用样本的真实类标校对,如过预测正确,将样本添加到正确预测的列表中


#%%
#在测试集上显示
outputs=net(images)
# 输出是预测与十个类的相似程度,与某一个类的近似程度越高,网络就越认为图像是属于这一类别
# 打印其中最相似类别类标
_, predictd=torch.max(outputs,1)
print('Predicted:',' '.join('%5s'% classes[predictd[j]]
                            for j in range(4)))

运行结果

在这里插入图片描述

把网络放在整个数据集上看看具体表现


#%% 结果看起来还好55%,看看网络在整个数据集的表现
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))

运行结果

在这里插入图片描述

8、分别查看一下训练效果吧


#%%分类查看
class_correct=list(0. for i in range(10))
class_total=list(0. for i in range(10))
with torch.no_grad():
    for data in testloader:
        images,labels=data
        outputs=net(images)
        _, predictd=torch.max(outputs,1)
        c=(predictd==labels).squeeze()
        for i in range(4):
            label=labels[i]
            class_correct[label]+=c[i].item()
            class_total[label]+=1
            
for i in range(10):
    print('Accuracy of %5s:%2d %%'% (classes[i],100*class_correct[i]/class_total[i]))

运行结果

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Python Pytorch深度学习之图像分类器

本文链接: https://www.lsjlt.com/news/155739.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python Pytorch深度学习之图像分类器
    目录一、简介二、数据集三、训练一个图像分类器1、导入package吧2、归一化处理+贴标签吧3、先来康康训练集中的照片吧4、定义一个神经网络吧5、定义一个损失函数和优化器吧6、训练网...
    99+
    2022-11-12
  • Pytorch深度学习之实现病虫害图像分类
    目录一、pytorch框架1.1、概念1.2、机器学习与深度学习的区别1.3、在python中导入pytorch成功截图二、数据集三、代码复现3.1、导入第三方库3.2、CNN代码3...
    99+
    2022-11-12
  • Python深度学习pytorch实现图像分类数据集
    目录读取数据集读取小批量整合所有组件目前广泛使用的图像分类数据集之一是MNIST数据集。如今,MNIST数据集更像是一个健全的检查,而不是一个基准。 为了提高难度,我们将在接下来的章...
    99+
    2022-11-12
  • Python Pytorch深度学习之自动微分
    目录一、简介二、TENSOR三、梯度四、Example——雅克比向量积总结一、简介 antograd包是Pytorch中所有神经网络的核心。autograd为Tensor上的所有操作...
    99+
    2022-11-12
  • python深度学习之多标签分类器及pytorch实现源码
    目录多标签分类器多标签分类器损失函数代码实现多标签分类器 多标签分类任务与多分类任务有所不同,多分类任务是将一个实例分到某个类别中,多标签分类任务是将某个实例分到多个类别中。多标签分...
    99+
    2022-11-13
  • Python Pytorch深度学习之Tensors张量
    目录一、Tensor(张量)二、操作总结环境:Anaconda自带的编译器——Spyder 最近才开使用conda,发现conda 就是 yyds,爱啦~ 一、Tensor(张量)...
    99+
    2022-11-12
  • Python深度学习之Pytorch初步使用
    目录一、Tensor二、Pytorch如何创建张量2.1 创建张量2.2 tensor与ndarray的关系2.3 常用api2.4 常用方法三、数据类型3.1 获取数据类型四、tensor的其他操作4.1 相加4....
    99+
    2022-06-02
    Python Pytorch python深度学习
  • Python Pytorch深度学习之神经网络
    目录一、简介二、神经网络训练过程2、通过调用net.parameters()返回模型可训练的参数3、迭代整个输入4、调用反向传播5、计算损失值6、反向传播梯度7、更新神经网络参数总结...
    99+
    2022-11-12
  • Python Pytorch深度学习之核心小结
    目录一、Numpy实现网络二、Pytorch:Tensor三、自动求导1、PyTorch:Tensor和auto_grad总结Pytorch的核心是两个主要特征: 1.一个n维ten...
    99+
    2022-11-12
  • Python Pytorch学习之图像检索实践
    目录背景图像表现搜索随着电子商务和在线网站的出现,图像检索在我们的日常生活中的应用一直在增加。 亚马逊、阿里巴巴、Myntra等公司一直在大量利用图像检索技术。当然,只有当通常的信息...
    99+
    2022-11-10
  • Python深度学习之使用Pytorch搭建ShuffleNetv2
    一、model.py 1.1 Channel Shuffle def channel_shuffle(x: Tensor, groups: int) -> Tensor: batch_si...
    99+
    2022-06-02
    Python Pytorch搭建ShuffleNetv2 python ShuffleNetv2
  • python深度学习tensorflow训练好的模型进行图像分类
    目录正文随机找一张图片读取图片进行分类识别最后输出正文 谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类。 下载链...
    99+
    2022-11-11
  • Python深度学习之使用Albumentations对图像做增强
    目录一、导入所需的库二、定义可视化函数显示图像上的边界框和类标签三、获取图像和标注四、使用RandomSizedBBoxSafeCrop保留原始图像中的所有边界框五、定义增强管道六、...
    99+
    2022-11-12
  • Python深度学习pytorch神经网络图像卷积运算详解
    目录互相关运算卷积层特征映射由于卷积神经网络的设计是用于探索图像数据,本节我们将以图像为例。 互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cros...
    99+
    2022-11-12
  • Python Pytorch深度学习之数据加载和处理
    目录一、下载安装包二、下载数据集三、读取数据集四、编写一个函数看看图像和landmark五、数据集类六、数据可视化七、数据变换1、Function_Rescale2、Function...
    99+
    2022-11-12
  • Python深度学习之图像标签标注软件labelme详解
    前言 labelme是一个非常好用的免费的标注软件,博主看了很多其他的博客,有的直接是翻译稿,有的不全面。对于新手入门还是有点困难。因此,本文的主要是详细介绍labelme该如何使用。 一、labelme是什么? l...
    99+
    2022-06-02
    Python图像标签标注软件labelme Python labelme
  • Python深度学习之FastText实现文本分类详解
    FastText是一个三层的神经网络,输入层、隐含层和输出层。 FastText的优点: 使用浅层的神经网络实现了word2vec以及文本分类功能,效果与深层网络差不多,节约资源,...
    99+
    2022-11-11
  • Python深度学习pytorch神经网络块的网络之VGG
    目录VGG块VGG网络训练模型与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似,神经网络结构的设计也逐渐变得更加抽象。研究人员开始从单个神经元的角度思考问题,发展到整个层...
    99+
    2022-11-12
  • Python机器学习之基于Pytorch实现猫狗分类
    目录一、环境配置二、数据集的准备三、猫狗分类的实例四、实现分类预测测试五、参考资料一、环境配置 安装Anaconda 具体安装过程,请点击本文 配置Pytorch pip install -i https://...
    99+
    2022-06-02
    Pytorch实现猫狗分类 Python Pytorch
  • 深度学习小工程练习之tensorflow垃圾分类详解
    介绍 这是一个基于深度学习的垃圾分类小工程,用深度残差网络构建 软件架构 使用深度残差网络resnet50作为基石,在后续添加需要的层以适应不同的分类任务 模型的训...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作