pytorch库 03 基础知识

文章目录

  • 一、准备工作
  • 二、tensorboard的使用
    • 1、add_scalar()方法
    • 2、add_image()方法
  • 三、transforms的使用
    • 1、ToTensor()类
    • 2、常见transforms的类
  • 三、torchvision中的数据集使用

官网 https://pytorch.org/

一、准备工作

①在pycharm和jupyter上,检查当前系统是否支持使用 NVIDIA 的 CUDA 加速计算

import torchprint(torch.cuda.is_available())    # True

②学习pytorch常用的一些方法:
dir():查看对象有什么属性
help():查看对象帮助文档
  在pycharm中,可以按ctrl,鼠标点击对象,查询对象帮助文档。
  在jupyter中,可以如下格式查询对象文档:对象??

ctrl + p 点击函数的括号,可以显示参数

③加载数据基础
常用两种类:
Dateset: 提供一种方式去获取数据及其label,并对数据编号,
  主要实现功能:获取每一个数据及其label。告诉我们总共有多少的数据,
目录结构:
在这里插入图片描述

test.py代码:

from torch.utils.data import Dataset
from PIL import Image
import osclass MyDate(Dataset):def __init__(self, root_dir, label_dir):self.root_dir = root_dirself.label_dir = label_dirself.path = os.path.join(self.root_dir, self.label_dir)self.img_path = os.listdir(self.path)def __getitem__(self, idx): # Dateset类规定的,必须重写此方法img_name = self.img_path[idx]img_item_path = os.path.join(self.root_dir, self.label_dir,img_name)img = Image.open(img_item_path)label = self.label_dirreturn img, labeldef __len__(self):return len(self.img_path)root_dir = "dataset/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyDate(root_dir, ants_label_dir)
bees_dataset = MyDate(root_dir, bees_label_dir)train_dataset = ants_dataset + bees_dataset # 将两个数据集合并data,label = ants_dataset.__getitem__(0)
print(ants_dataset.img_path)
print(label)    # ants
data.show() # 显示图像

Dateloader: 为后面的网络提供不同的数据形式。

import torchvision# 准备的测试数据集
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWritertest_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())# batch_size是每次从数据集取的数据单元数量
# shuffle=True 表示每轮(epoch)选取数据单元时,是否打乱顺序
# num_workers表示执行程序的进程数量。在windows中,多进程执行容易报错。num_workers=0表示只有一个主进程
# drop_last=True 表示最后一组batch数量小于batch_size,则丢弃
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)writer = SummaryWriter("dataloader")
for epoch in range(2):step = 0for data in test_loader:imgs, targets = data# print(imgs.shape)# print(targets)writer.add_images("Epoch:{}".format(epoch),imgs, step)step = step + 1writer.close()

二、tensorboard的使用

tensorboard一个是可视化工具

1、add_scalar()方法

from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")
# logs为事件文件所在文件夹for i in range(100):writer.add_scalar("y=3x",3*i,i) # scalar为标量writer.close()

先运行上述代码,再在Terminal中执行如下指令:
tensorboard --logdir=logs
出现如下链接:
在这里插入图片描述
点击链接,弹出网页:
在这里插入图片描述
另外,还可以自定义端口,例:
tensorboard --logdir=logs --port=6007

2、add_image()方法

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter("logs")
image_path = "dataset/train/bees/2227611847_ec72d40403.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)   # 将img_PIL转化为numpy数组
print(type(img_array))  # <class 'numpy.ndarray'>
print(img_array.shape)  # (450, 500, 3)writer.add_image("train", img_array, 2, dataformats='HWC')
# HWC分别表示图像的高度、宽度、通道writer.close()

注:运行上述代码,报错AttributeError: module ‘PIL.Image’ has no attribute ‘ANTIALIAS’。解决方法: pip install pillow==9.5.0

三、transforms的使用

transforms主要用来对图片进行一些变化,即:
图片 → transforms的方法 → 结果

1、ToTensor()类

因为tensor方法包含神经网络使用的常用数据,所以常用ToTensor()类进行转换。

from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriterimg_path = "dataset//train//bees//17209602_fe5a5a746f.jpg"
img = Image.open(img_path)  # 以PIL Image类型打开图片tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)  # 参数img需要PIL Image or numpy.ndarray类型print(type(tensor_img)) # <class 'torch.Tensor'>writer = SummaryWriter("logs")writer.add_image("Tensor_img", tensor_img)
writer.close()

opencv是将图片以numpy.ndarray类型打开

import cv2
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriterimg_path = "dataset//train//bees//17209602_fe5a5a746f.jpg"
img = cv2.imread(img_path)tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)print(type(tensor_img)) # <class 'torch.Tensor'>writer = SummaryWriter("logs")writer.add_image("Tensor_img2", tensor_img)
writer.close()

2、常见transforms的类

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("dataset//train//ants//0013035.jpg")
print(img)# TOTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)# Resize
print(img.size)
trans_resize = transforms.Resize((512,512))
img_resize = trans_resize(img)
print(img_resize)
img_resize = trans_totensor(img_resize)
writer.add_image("Resize",img_resize,0)# compose()中的参数需要一个列表,列表元素是transforms类型对象
# 输入数据从第一个列表元素开始,顺序执行。
# 前一个列表元素的输出结果,为后一个元素的输入数据
trans_resize_2 = transforms.Resize(100)
trans_compose = transforms.Compose([trans_resize_2,trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2,1)# RandomCrop 随机裁剪
trans_random = transforms.RandomCrop(512)
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(9):img_crop = trans_compose_2(img)writer.add_image("RandomCrop",img_crop,i)writer.close()

三、torchvision中的数据集使用

以CIFAR10数据集为例:

import torchvision
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformsdataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()
])# root:数据集存放位置。 train:是否为训练集。 download:是否下载数据集,建议设置为True,这样即使下载了,也不会再下载
# 也可以提前把数据集下载到指定目录,下述代码不变,可以自动解压数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=True)# print(test_set[0])
# print(test_set.classes)# img, target = test_set[0]   # target为label
# print(test_set.classes[target])
# print(img.shape)    # torch.Size([3, 32, 32])
# to_pil = transforms.ToPILImage()
# pil_image = to_pil(img)
# pil_image.show()writer = SummaryWriter("logs")
for i in range(10):img, target = test_set[i]writer.add_image("test_set", img, i)writer.close()

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

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

相关文章

构建LangChain应用程序的示例代码:42、如何使用 `LLMCheckerChain` 来验证和校正由大型语言模型(LLM)生成的文本

自我检查链使用指南 概述 本指南展示了如何使用 LLMCheckerChain 来验证和校正由大型语言模型&#xff08;LLM&#xff09;生成的文本。 代码示例 from langchain.chains import LLMCheckerChain # 导入 LLMCheckerChain 类 from langchain_openai import OpenAI # 导入 …

SpringBoot的Web开发支持【超详细【一篇搞定】果断收藏系列】

Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(“MyInterceptor.afterCompletion”); } } 使用Java的形式配置拦截器的拦截路径 在WebMvcConfig…

记录:windows 命令板快捷键

dir 列出当前目录下的所有文件cd 目录名&#xff1a; cd. 进入当前目录 cd…进入上一层目录md 目录名 创建文件夹rd 目录名 删除文件夹cd.>文件名.后缀名 比如 cd.>a.txtcls 清除exit 退出

与亚马逊云科技深度合作,再获WAPP、ISV认证

上半年&#xff0c;VERYCLOUD睿鸿股份加入亚马逊云科技的WAPP&#xff08;Well-Architected Partner Programs&#xff09;和ISV加速计划&#xff08;ISV Accelerate Program&#xff09;&#xff0c;为客户带来更坚实优质的海外云服务。 Well-Architected 获得WAPP这项认证代表…

Oracle day11

/*create table tbemp --职员表 ( eid number(7) primary key, --职员编号 ename varchar2(20) not null, --职员姓名 esex varchar2(3) not null check(esex in(男,女)), eage number not null check(eage>18), eaddr varchar2(50) …

比较(四)利用python绘制平行坐标图

比较&#xff08;四&#xff09;利用python绘制平行坐标图 平行坐标图&#xff08;Parallel coordinate plot&#xff09;简介 平行坐标图可以显示多变量的数值数据&#xff0c;最适合用来同一时间比较许多变量&#xff0c;并表示它们之间的关系。缺点也很明显&#xff0c; 不…

自己只能跑llama3-8b模型,告诉你一个免费使用llama3-70b的方法

我们前期介绍了Llama 3大模型&#xff0c;以及本地部署了Llama 3 8b模型&#xff0c;但是想体验一下llama3-70b的模型的话&#xff0c;需要很大的计算资源&#xff0c;且要求极高的内存。llama3-8b的模型约4.7G &#xff0c;而llama3-70b的模型约40G&#xff0c;若想在自己的电…

Servlet常用类剖析

通过继承HttpServlet实现Servlet程序 实际开发中&#xff0c;一般使用继承HttpServlet类的方法去实现Servlet程序。 步骤&#xff1a; 1、编写一个类去继承HttpServlet类 2、根据业务需要重写doGet或doPost方法 3、到web.xml中配置Servlet程序 1、编写一个类&#xff0c;Altin…

Spring整合CXF,发布RSETful 风格WebService

import javax.ws.rs.core.MediaType; import com.hoo.entity.MapBean; import com.hoo.entity.User; import com.hoo.entity.Users; /* 注释&#xff08;Annotation&#xff09;&#xff1a;在 javax.ws.rs.* 中定义&#xff0c;是 JAX-RS (JSR 311) 规范的一部分。 Path…

【蓝队小WIKI】攻防演练中防守方重点知识点整理

一、蓝队防守策略&#xff1a; 工作流程概述 Hvv蓝队技战法&#xff1a;Hvv蓝队技战法 - FreeBuf网络安全行业门户 3个阶段&#xff0c;4大要点&#xff0c;蓝队防守全流程纲要解读&#xff1a;攻防演练合集 | 3个阶段&#xff0c;4大要点&#xff0c;蓝队防守全流程纲要解读 -…

oracle 11g rac安装grid 执行root脚本add vip -n 。。。on node= ... failedFailed 错误处理

问题&#xff1a; CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node racdg1-1, number 1, and is terminating An active cluster was found during exclusive startup, restarting to join the cluster PRCN-2050 : The requ…

js小题:通过字符串执行同名变量怎么做

在JavaScript中&#xff0c;你不能直接使用一个字符串来直接引用一个变量&#xff0c;因为JavaScript是一种静态类型语言&#xff08;尽管它的类型在运行时可以变化&#xff09;&#xff0c;变量的名字在编译时就被确定了。但是&#xff0c;有几种方法可以实现类似的功能&#…

构建LangChain应用程序的示例代码:41、如何结合使用大型语言模型(LLMs)和 bash 进程来执行简单的文件系统命令指南

Bash 命令链使用指南 概述 本指南展示了如何结合使用大型语言模型&#xff08;LLMs&#xff09;和 bash 进程来执行简单的文件系统命令。 代码示例 from langchain_experimental.llm_bash.base import LLMBashChain from langchain_openai import OpenAI# 初始化 OpenAI 的…

k8s部署grafana beyla实现app应用服务依赖图可观测

k8s部署grafana beyla OS: Static hostname: test Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 83bb7e5dbf27453c94ff9f1fe88d5f02 Virtualization: vmware Operating System: Ubuntu 22.04.4 LTS Kernel: Linux 5.15.0-105-g…

BEVM基于OP-Stack发布首个以WBTC为GAS连接以太坊和比特币生态的中继链

为了更好的连接以太坊和比特币生态&#xff0c;BEVM团队正在基于OPtimism的OP Stack来构建一个以WBTC为GAS兼容OP-Rollup的中继链&#xff0c;这条中继链将作为一种完全去中心化的中间层&#xff0c;把以太坊上的主流资产(WBTC/ ETH/USDC/USDT等)引入到BEVM网络。 不仅如此&am…

AlgorithmStar 度量 计算组件

AlgorithmStar 度量 计算组件 AlgorithmStar 本文将会基于 AlgorithmStar 1.40 以及以上的版本来演示&#xff0c;度量 计算 组件 的使用&#xff01; 目录 文章目录 AlgorithmStar 度量 计算组件目录获取到依赖库度量计算组件 计算实例距离计算代表 - 欧几里德距离计算组件…

Redis数据库(一):Redis数据库介绍与安装

Redis是一种高性能的开源内存数据库&#xff0c;支持多种数据结构&#xff08;如字符串、列表、集合等&#xff09;&#xff0c;具有快速的读写速度。它提供持久化、主从复制、高可用性和分布式部署等功能&#xff0c;适用于缓存、实时分析、消息队列等应用场景。Redis使用简单…

UE5 场景物体一键放入蓝图中

场景中&#xff0c;选择所有需要加入到蓝图的模型或物体。 点击 蓝图按钮&#xff0c;点击“将选项转换为蓝图” 在创建方法中&#xff0c;选择“子Actor”或着 “获取组件” 如果需要保持相对应的Actor的父子级别&#xff08;多层&#xff09;&#xff0c;那么选择“获取组件…

计算机组成原理 | 数据的表示、运算和校验(4)基本运算方法

补码加减&#xff08;运算与控制&#xff09; (-Y)补 [Y补]变补&#xff0c;这个要好好理解 (-Y)补&#xff1a;先将Y的符号位置反&#xff0c;在求-Y的补码&#xff08;数字为变反加1&#xff09; [Y补]变补&#xff1a;先求Y的补码&#xff08;数字为变反加1&#xff09;&…

protobuf实践+生成C++代码的解析

目录 1.实践1&#xff08;简单使用&#xff09; 2.实践2&#xff08;存储列表类数据&#xff09; 3.实践3&#xff08;定义RPC方法&#xff09; 4.解析protobuf的message类 5.解析protobuf的service类 6.Rpcchannel是什么呢&#xff1f; 1.实践1&#xff08;简单使用&…