PyTorch是使用GPU和CPU优化的深度学习张量库——torchvision

torchvision

datasets

torchvision.datasets 包含了许多标准数据集的加载器。例如,CIFAR10ImageFolder 是其中两个非常常用的类。

CIFAR10

CIFAR10 数据集是一个广泛使用的数据集,包含10类彩色图像,每类有6000张图像(5000张训练集,1000张测试集)。下面是如何加载 CIFAR10 的示例:

import torch
from torchvision import datasets, transforms# 定义数据转换
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])# 加载训练集
trainset = 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 = 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')

ImageFolder

ImageFolder 用于加载按照类别分文件夹存储的图像数据集。

import os
from torchvision import datasets, transformsdata_dir = './path/to/dataset'
transform = transforms.Compose([transforms.Resize(255),transforms.CenterCrop(224),transforms.ToTensor()])image_datasets = datasets.ImageFolder(data_dir, transform=transform)
dataloaders = torch.utils.data.DataLoader(image_datasets, batch_size=4, shuffle=True, num_workers=2)

models

torchvision.models 提供了一系列预训练模型,如 ResNet、VGG、InceptionV3 等。

ResNet模型:

SetsNet并不是torchvision中的一个组件,而是指一类处理集合数据的神经网络。SetsNet和其他类似的网络(如DeepSets)旨在处理无序的集合输入,这些输入可以是点云、图像集合、特征向量集合等。SetsNet的设计原则是输入集合的顺序不会影响输出,即网络应该对输入的排列不变。

import torch
import torchvision.models as modelsmodel = models.resnet50(pretrained=True)
model.eval()# 预处理图像数据
preprocess = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])# 加载图像
img_path = './path/to/image.jpg'
img = Image.open(img_path)
img_tensor = preprocess(img)
batch_img_tensor = torch.unsqueeze(img_tensor, 0)# 预测
out = model(batch_img_tensor)

VGG模型:

VGG网络是一种经典的卷积神经网络架构,广泛应用于图像分类。下面是如何加载预训练的VGG模型并在一张图像上进行预测的示例:

import torch
from torchvision import models, transforms
from PIL import Image# 加载预训练的VGG16模型
vgg16 = models.vgg16(pretrained=True)
vgg16.eval()# 图像预处理
preprocess = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])# 加载图像
img_path = './path/to/image.jpg'
img_pil = Image.open(img_path)
img_tensor = preprocess(img_pil)
batch_img_tensor = torch.unsqueeze(img_tensor, 0)# 预测
out = vgg16(batch_img_tensor)
_, pred = torch.max(out, 1)
print("Predicted class:", pred.item())

Inception模型:

InceptionV3是一种更复杂的卷积神经网络架构,设计用于处理高分辨率图像。以下是如何加载预训练的InceptionV3模型并进行预测:

import torch
from torchvision import models, transforms
from PIL import Image# 加载预训练的InceptionV3模型
inceptionv3 = models.inception_v3(pretrained=True)
inceptionv3.eval()# 图像预处理
preprocess = transforms.Compose([transforms.Resize(299),transforms.CenterCrop(299),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])# 加载图像
img_path = './path/to/image.jpg'
img_pil = Image.open(img_path)
img_tensor = preprocess(img_pil)
batch_img_tensor = torch.unsqueeze(img_tensor, 0)# 预测
out = inceptionv3(batch_img_tensor)
_, pred = torch.max(out, 1)
print("Predicted class:", pred.item())

utils

make_grid 网格排列

是一个用于在PyTorch中将多个图像张量组合成一个图像网格的函数。这对于可视化数据集、模型输出或者训练过程中的变化非常有用。make_grid接受一系列图像张量,并返回一个单一的张量,该张量包含了所有输入图像按网格排列的结果

import torchvision.utils as vutils# 假设有数据加载器 dataloaders
dataiter = iter(dataloaders)
images, labels = dataiter.next()# 使用 make_grid 创建图像网格
img_grid = vutils.make_grid(images)# 显示图像网格
imshow(img_grid.numpy().transpose((1, 2, 0)))

save_image 保存图像

save_image函数可以用来保存一个张量为图像文件。下面是一个如何保存图像的例子:

import torch
from torchvision.utils import save_image
from PIL import Image# 假设我们有一个图像张量
img_tensor = torch.randn(3, 224, 224)# 保存图像
save_image(img_tensor, 'saved_image.jpg')# 也可以从PIL Image转换为张量并保存
img_pil = Image.new('RGB', (224, 224), color='white')
img_tensor = transforms.ToTensor()(img_pil)
save_image(img_tensor, 'saved_image_from_pil.jpg')

请确保替换上述代码中的./path/to/image.jpg为实际的图像路径,并确保在运行代码之前有正确的权限访问指定的路径。此外,如果还没有安装torchvisionPillow,可能需要先安装:

pip install torchvision pillow

transforms

是PyTorch中一个重要的模块,用于进行图像预处理和数据增强。它位于torchvision.transforms模块中,主要用于处理PIL图像和Tensor图像。transforms可以帮助你在训练神经网络时对数据进行各种变换,例如随机裁剪、大小调整、正则化等,以增加数据的多样性和模型的鲁棒性。

常见的transforms包括:

  1. 数据类型转换

    • ToTensor(): 将PIL图像或NumPy数组转换为PyTorch的Tensor格式。
  2. 几何变换

    Resize(size): 调整图像大小。                                                              CenterCrop(size): 中心裁剪图像。                                                              RandomCrop(size): 随机裁剪图像。                                          RandomHorizontalFlip(p=0.5): 随机水平翻转图像。
  3. 色彩变换

    ColorJitter(brightness, contrast, saturation, hue): 随机调整图像的亮度、对比度、饱和度和色调。
  4. 正则化

    Normalize(mean, std): 标准化图像像素值。

使用transforms

通常需要将它们组合成一个transforms.Compose对象,以便按顺序应用到图像数据上。这样可以灵活地定义数据增强的流程,适应不同的任务需求和数据特征。

当使用transforms进行图像预处理数据增强时,通常需要按照以下步骤进行操作:

1.导入必要的库:

 from torchvision import transformsfrom PIL import Image


2.定义transforms操作:可以根据需求选择合适的transforms进行组合。

 transform = transforms.Compose([transforms.Resize((256, 256)),     # 调整图像大小为256x256transforms.RandomCrop(224),        # 随机裁剪图像为224x224transforms.RandomHorizontalFlip(), # 随机水平翻转图像transforms.ToTensor(),             # 将图像转换为Tensor,并归一化至[0, 1]transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])# 标准化图像像素值])


3.加载图像并应用transforms: 

 # 假设有一张名为image.jpg的图像img = Image.open('image.jpg')# 应用transformsimg_transformed = transform(img)


4.查看处理后的图像:处理后的图像会转换为Tensor,并进行了resize、crop、翻转等操作。

  print(img_transformed.size())  # 输出处理后的图像大小

在上面的例子中,transforms.Compose用于将多个transforms组合起来,依次应用到图像上。这种方式能够让你根据任务需求定义灵活的图像处理流程,例如在训练神经网络时进行数据增强,提升模型的泛化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 类和对象(上)

再C中,我们使用类定义自己的数据类型。通过定义新的类型来反映待解决的问题中的各种概念,可以使我们更容易编写,调试和修改程序。 类定义格式 首先类的定义格式和结构体差不多,而结构体的那一套语法也可以在C中使用。class是定义…

oracle数据库的plsql免安装版安装

这个是连接oracle数据库的,注意安装不能有中文路径。以下只是示例。 1、打开D:\ruanjian\plsql\plsql\plsql,发送plsqldev.exe快捷方式到桌面。 2、新弹出的页面填写cancel,什么也不写。 3、将instanceclient解压,并复制文件路径。 修改tool…

[Python学习篇] Python搭建静态web服务器

Python内置的web静态服务器 Python内置的http.server模块可以快速启动一个简单的HTTP服务器。 在Python 3中,打开命令行或终端,在你想要作为静态服务器根目录的文件夹下,运行以下命令: python -m http.server 8000 这将会在…

纯vue+js实现数字0到增加到指定数字动画效果功能

关于数字增加动画效果网上基本上都是借助第三方插件实现的,就会导致有的项目安装插件总会出问题,所有最好使用原生vue+js实现,比较稳妥 纯vue+js实现数字0到增加到指定数字动画效果功能 vue+js 实现数字增加动画功能 效果图 其中,关于数字变化的间隔时间,延时效果都可…

澳门建筑插画:成都亚恒丰创教育科技有限公司

澳门建筑插画:绘就东方之珠的斑斓画卷 在浩瀚的中华大地上,澳门以其独特的地理位置和丰富的历史文化,如同一颗璀璨的明珠镶嵌在南国海疆。这座城市,不仅是东西方文化交融的典范,更是建筑艺术的宝库。当画笔轻触纸面&a…

一个spring boot项目的启动过程分析

1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…

(三)Redis持久化,你真的懂了吗?万字分析AOF和RDB的优劣 AOF的刷盘、重写策略 什么叫混合重写 MP-AOF方案是什么

引言 —— Redis基础概念 Redis概念&#xff1a;Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对&#xff08;key-value&#xff09;数据库。 为什么会出现Redis呢&#xff1f;它的到来是为了解决什么样的问题&#xff1f; Redis 是一个NOSQL类型…

操作系统真象还原:创建文件系统

14.2 创建文件系统 14.2.1 创建超级块、i结点、目录项 超级块 /** Author: Adward-DYX 1654783946qq.com* Date: 2024-05-07 10:18:02* LastEditors: Adward-DYX 1654783946qq.com* LastEditTime: 2024-05-07 11:24:50* FilePath: /OS/chapter14/14.2/fs/super_block.h* Des…

WPF学习(6) -- WPF命令和通知

一 、WPF命令 1.ICommand代码 创建一个文件夹和文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input;namespace 学习.Command {public class MyCommand : ICommand{Acti…

CCSI: 数据无关类别增量学习的持续类特定印象| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 CCSI: Continual Class-Specific Impression for data-free class incremental learning CCSI: 数据无关类别增量学习的持续类特定印象 01 文献速递介绍 当前用于医学影像分类任务的深度学习模型表现出令人鼓舞的性能。这些模型大多数需要在训练之前收集所有的…

中间件——Kafka

两个系统各自都有各自要去做的事&#xff0c;所以只能将消息放到一个中间平台&#xff08;中间件&#xff09; Kafka 分布式流媒体平台 程序发消息&#xff0c;程序接收消息 Producer&#xff1a;Producer即生产者&#xff0c;消息的产生者&#xff0c;是消息的入口。 Brok…

[Vulnhub] Sedna BuilderEngine-CMS+Kernel权限提升

信息收集 IP AddressOpening Ports192.168.8.104TCP:22, 53, 80, 110, 111, 139, 143, 445, 993, 995, 8080, 55679 $ nmap -p- 192.168.8.104 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 …

在RHEL9.4上启用SFTP服务

FTP存在的不足&#xff1a; 明文传输 FTP传输的数据&#xff08;包括用户名、密码和文件内容&#xff09;都是明文的&#xff0c;这意味着数据可以被网络上的任何人截获并读取。没有内置的加密机制&#xff0c;容易受到中间人攻击。 被动模式下的端口问题 FTP的被动模式需要…

读人工智能全传12人工智能导致的问题1

1. 人工智能会导致什么问题 1.1. 人工智能是一门通用技术&#xff1a;它的应用仅仅受限于我们的想象 1.1.1. 所有的技术都可能产生意想不到的效果&#xff0c;未来几十年甚至几百年内都存在可能性 1.2. 所有的技术都可能被滥用 1.2.1. 我们的无名氏祖先率先用上了火&#x…

编写商品列表和商品编辑和商品新增页面

addvue <template><!-- 传过来的id --> <!-- {{ $route.query.id }} --> <el-formref"FormRef"style"max-width: 600px":model"FormData":rule"rules"status-iconlabel-width"auto"class"demo-r…

Golang | Leetcode Golang题解之第232题用栈实现队列

题目&#xff1a; 题解&#xff1a; type MyQueue struct {inStack, outStack []int }func Constructor() MyQueue {return MyQueue{} }func (q *MyQueue) Push(x int) {q.inStack append(q.inStack, x) }func (q *MyQueue) in2out() {for len(q.inStack) > 0 {q.outStack…

【web】-sql注入-login

根据网址提示打开如图&#xff1a; 查看源代码前台并没有过滤限制、扫描后台也没有发现特殊文件。看到标题显示flag is in database&#xff0c;尝试sql注入。 由于post,bp抓包如下&#xff1a; 运行python sqlmap.py -r 1.txt --dump 获取flag 42f4ebc342b6ed4af4aadc1ea75f…

昇思25天学习打卡营第20天 | 基于MindNLP+MusicGen生成自己的个性化音乐

基于MindNLPMusicGen生成个性化音乐 实验简介 MusicGen是Meta AI提出的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量音乐。该模型基于Transformer结构&#xff0c;分为三个阶段&#xff1a;文本编码、音频token预测和音频解码。此实验将演示如何使用MindSpo…

搞定ES6同步与异步机制、async/await的使用以及Promise的使用!

文章目录 同步和异步async/awaitPromisePromise的概念 同步和异步 ​ 同步&#xff1a;代码按照编写顺序逐行执行&#xff0c;后续的代码必须等待当前正在执行的代码完成之后才能执行&#xff0c;当遇到耗时的操作&#xff08;如网络请求等&#xff09;时&#xff0c;主线程会…

数据结构(初阶2.顺序表)

文章目录 一、线性表 二、顺序表 2.1 概念和结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3动态顺序表的实现 1.SeqList.h 2.SeqList.c 打印顺序表 初始化 销毁 增容 尾插 头插 在指定位置之前插入数据 尾删 头删 在指定位置删除数据 3.test.c 一、线性表 线性表&#…