Pytorch(一)

一.PyTorch环境配置及安装

1.1 工具安装

1.1.1 Anaconda下载

清华大学镜像站下载,版本为Anaconda3-5.2.0-Windows-x86_64(对应python3.6.5)

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

1.1.2 Pytorch安装

进入官网。选择合适版本下载Start Locally | PyTorch(不推荐),因为我下载了好几次失败了

推荐使用下面的方法:

  • torch下载:

    pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
  • opencv下载:

    pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  • torchvision

    pip install torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple

二、DataSet

2.1 DataSet的作用

①获取每个数据及其label

②获取数据总数

2.2 认识DataSet

由上图可知dataset是一个抽象类,可以用来创造数据集,而抽象类不能实例化,需要构造抽象类的子类来创建数据集,所有的datasets继承这个类,并重写两个方法:(1)get_item 方法获取数据和label(2)len:获取数据总数

2.3 重写dataset

PIL中的Image

  • img=Image.open(image_path) 读取图像路径作为一个变量

  • img.show() 打开图片

os:

  • os.path.join(dir1,dir2):将两个路径合并在一起

  • os.listdir(dir):将目标路径dir中的所有文件路径生成一个列表

from torch.utils.data import Dataset, ConcatDataset
import os
from PIL import Image
​
class MyDataset(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 __len__(self):return len(self.img_path)
​def __getitem__(self, idx):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_dir  # 这里可能需要根据实际情况调整return img, label
​
# 定义根目录和标签目录
root_dir = "hymenoptera_data\\train"
ants_label_dir = "ants_img"
bees_label_dir = "bees_img"
​
# 创建数据集实例
ant_datasets = MyDataset(root_dir, ants_label_dir)
bee_datasets = MyDataset(root_dir, bees_label_dir)
​
# 使用 ConcatDataset 合并数据集
train_datasets = ConcatDataset([ant_datasets, bee_datasets])
​
# 获取第一个样本
img, label = train_datasets[0]
print(label)

2.4 将数据集格式转化为txt存放label格式

import os
# 设置根目录和图像目录
root_dir = r"D:\桌面\Python\1024\hymenoptera_data\train"
ants_dir = "ants_img"
ant_image_path = os.path.join(root_dir, ants_dir)
ant_path_list = os.listdir(ant_image_path)
# 获取标签
ants_label = ants_dir.split("_")[0]
# 输出目录
out_dir = "ants_label"
# 遍历图像目录中的所有文件
for i in ant_path_list:# 创建输出文件路径file_name=i.split('.jpg')[0]print(file_name)output_file_path = os.path.join(root_dir, out_dir, "{}.txt".format(file_name))print(output_file_path)# 写入标签到文本文件with open(output_file_path, 'w') as f:f.write(ants_label)

三、TensorBoard

3.1 安装TensorBoard

pip install tensorboard

3.2 SummaryWriter

由上图可知:此类是将事件写进log_dir文件夹中,被TensorBoard解析,用于观察损失函数的变化

from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs")

3.2.1 add_scalar()

def add_scalar(self,tag,scalar_value,global_step=None,walltime=None,new_style=False, double_precision=False,): """Add scalar data to summary. Args: tag (string): Data identifier 标题 scalar_value (float or string/blobname): Value to save 添加的值,y轴 global_step (int): Global step value to record 训练步数,x轴 walltime (float): Optional override default walltime (time.time()) with seconds after epoch of event new_style (boolean): Whether to use new style (tensor field) or old style (simple_value field). New style could lead to faster data loading. Examples::

     from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter()x = range(100)for i in x:writer.add_scalar('y=2x', i * 2, i)writer.close()"""

在终端输入:tensorboard --logdir=logs

可通过参数 --port=xx 指定端口,以防止端口冲突(多用户使用同一服务器进行训练时):tensorboard --logdir=logs --port=6007

注:

  • 这个命令会打开 logdir文件夹下的所有事件文件。

  • 图表以 tag 作为区分,可向一个 tag多次写入数据,会自动进行拟合。

举个栗子

绘制y=x^2图像,并将图像存至log文件中

from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("log")
for i in range(100):writer.add_scalar("y=x^2",i*i,i)
writer.close()

3.2.2 add_image()

def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'):

"""Add image data to summary.

Note that this requires the pillow package.

Args:

tag (string): Data identifier 标题

img_tensor (torch.Tensor, numpy.array, or string/blobname): Image data 要求图像的数据类型为torch.Tensor,numpy.array,string/blobname

global_step (int): Global step value to record 训练步数

walltime (float): Optional override default walltime (time.time())

seconds after epoch of event

Shape:

img_tensor: Default is :math:(3, H, W). You can use torchvision.utils.make_grid() to

convert a batch of tensor into 3xHxW format or call add_images and let us do the job.

Tensor with :math:(1, H, W), :math:(H, W), :math:(H, W, 3) is also suitable as long as

corresponding dataformats argument is passed, e.g. CHW, HWC, HW.dataformats = 'HWC':图片的格式High高度,Weight宽度,channel通道数;默认通道数在前

"""

举个栗子
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
​
writer=SummaryWriter("log")
img_path=r"hymenoptera_data/train/ants_img/0013035.jpg"
img =Image.open(img_path)
print(type(img))
#<class 'PIL.JpegImagePlugin.JpegImageFile'>
img_array=np.array(img)
print(type(img_array))
#<class 'numpy.ndarray'>
writer.add_image("test", img_array, 1, dataformats = 'HWC')
writer.close()

PILnumpy,需要在add_image()中指定shape中每一个数字/维表示的含义

3.2.3 close()

把缓存中保存的数据写到目标events文件中,一旦训练中断没有close,则你的保存目录中不会有相应的数据。

四、transforms

torchvision中的transforms主要是对图片进行一些变换。 tranforms对应 tranforms.py 文件,里面定义了很多类,输入一个图片对象,返回经过处理的图片对象。

transforms.py就像一个工具箱,里面定义的各种类就像各种工具,图片就是输入对象,经过工具处理,输出期望的图片结果。

4.1 transforms.ToTensor

4.1.1 如何用

ToTensor功能是将PIL Image类型或者numpy ndarry类型的图片对象转换为tensor类型。

from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
img_path="hymenoptera_data/train/ants_img/0013035.jpg"
img=Image.open(img_path)
trans_tensor=transforms.ToTensor()
img_tensor=trans_tensor(img)
writer=SummaryWriter("logs")
writer.add_image("test3",img_tensor)
writer.close()

使用transforms的方法就是 先实例化选中的类,然后用实例化的对象去处理图片就行。

4.1.2 为什么需要Tensor类型

tensor 数据类型可以理解为包装了反向神经网络一些理论基础参数。在神经网络中,要将数据先转换为Tensor类型,再进行训练。

4.2 常用的Transforms API函数

4.2.1 常用的输入图片数据类型

  • PIL:Image.open()

  • tensor:transforms.ToTensor()

  • ndarrays:cv.Imcread()

4.2.2 常用的Transform

  • ToTensor():将图片对象类型转换为Tensor

  • Normalize():对图像像素进行归一化计算

  • Resize():重新设置PIL Image的大小,返回的也是PIL Image格式

  • Compose():输入为transforms类型参数列表

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
import os
​
root_path = "hymenoptera_data/train/ants"
img_name = "7759525_1363d24e88.jpg"
img_path = os.path.join(root_path,img_name)
img = Image.open(img_path)
​
writer = SummaryWriter("logs")
​
# ToTensor
trans_totensor = transforms.ToTensor() # instantiation
img_tensor = trans_totensor(img)
writer.add_image("Tensor", 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) # return type still is PIL image
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize)
​
# Compose - resize -2
trans_resize_2 = transforms.Resize(512)
tran_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize2 = tran_compose(img)
writer.add_image("Compose", img_resize2)
​
writer.close()

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

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

相关文章

关于我的数据结构与算法——初阶第二篇(排序)

&#xff08;叠甲&#xff1a;如有侵权请联系&#xff0c;内容都是自己学习的总结&#xff0c;一定不全面&#xff0c;仅当互相交流&#xff08;轻点骂&#xff09;我也只是站在巨人肩膀上的一个小卡拉米&#xff0c;已老实&#xff0c;求放过&#xff09;。 排序的概念及其运…

AI驱动的低代码未来:加速应用开发的智能解决方案

引言 随着数字化转型的浪潮席卷全球&#xff0c;企业对快速构建应用程序的需求愈发强烈。然而&#xff0c;传统的软件开发周期冗长、成本高昂&#xff0c;往往无法满足快速变化的市场需求。在此背景下&#xff0c;低代码平台逐渐成为开发者和企业的优选方案&#xff0c;以其“低…

三周精通FastAPI:21 子依赖项和路径操作装饰器依赖项

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/tutorial/dependencies/sub-dependencies/#_6 子依赖项 FastAPI 支持创建含子依赖项的依赖项。 并且&#xff0c;可以按需声明任意深度的子依赖项嵌套层级。 FastAPI 负责处理解析不同深度的子依赖项。 第一层依赖项 …

模具生产管理系统软件:提升制造业效率的新利器

引言 我们都知道&#xff0c;企业面临着提高生产效率、降低成本和提升产品质量的压力。模具生产作为制造过程中至关重要的一环&#xff0c;如何有效管理和优化模具生产过程&#xff0c;成为企业关注的重点。模具生产管理系统应运而生&#xff0c;能够为企业提供实时监控、流程…

MySQL中,如何定位慢查询?定位到的慢SQL如何分析?

目录 1. 慢查询发生的场景&#xff1f; 2. MySQL中&#xff0c;如何定位慢查询&#xff1f; 2.1 详细解释 3. 定位到的慢SQL如何分析&#xff1f; 3.1 详细说明 1. 慢查询发生的场景&#xff1f; 2. MySQL中&#xff0c;如何定位慢查询&#xff1f; 介绍一下当时产生问题…

「C/C++」C++ 设计模式 之 单例模式(Singleton)

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

华为云开源项目Sermant正式成为CNCF官方项目

近日&#xff0c;云原生计算基金会&#xff08;CNCF&#xff09;正式接纳由华为云发起的云原生无代理服务网格项目Sermant。Sermant的加入&#xff0c;极大地丰富了云原生微服务治理技术的探索、创新和发展&#xff0c;为CNCF社区注入了新的活力。 Sermant是华为云在微服务治理…

用sdcc给51单片机编译C程序

学习单片机大部分人用的是Keil uVision&#xff0c;虽然好用&#xff0c;可大部分人用的是盗版&#xff0c;其实单片机程序小的话&#xff0c;完全可以用文本编辑器&#xff08;推荐notepad)编写&#xff0c;然后用免费的sdcc来编译&#xff0c;下面介绍一下大致的过程。 sdcc…

Ajax:表单 模板引擎

Ajax&#xff1a;表单 & 模板引擎 form 表单form 属性 Ajax操控表单事件监听阻止默认行为收集表单数据 模板引擎art-template{{}}语法原文输出条件输出循环输出过滤器 原理 form 表单 在HTML中&#xff0c;可以通过<form>创建一个表单&#xff0c;收集用户信息。而采…

【水下生物数据集】 水下生物识别 深度学习 目标检测 机器视觉 yolo(含数据集)

一、背景意义 随着全球海洋生态环境的日益变化&#xff0c;水下生物的监测和保护变得愈发重要。水下生物种类繁多&#xff0c;包括螃蟹、鱼类、水母、虾、小鱼和海星等&#xff0c;它们在海洋生态系统中扮演着关键角色。传统的水下生物监测方法通常依赖于人工观察&#xff0c;效…

[vulnhub]Kioptrix: Level 1.2 (#3)

https://www.vulnhub.com/entry/kioptrix-level-12-3,24/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的&#xff0c;所以靶机IP是169 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-29 13:16 CST …

TVM前端研究--Relay

文章目录 深度学习IR梳理1. IR属性2. DL前端发展3. DL编译器4. DL编程语言Relay的主要内容一、Expression in Relay1. Dataflow and Control Fragments2. 变量3. 函数3.1 闭包3.2 多态和类型关系3.3. Call4. 算子5. ADT Constructors6. Moudle和Global Function7. 常量和元组8.…

Ubuntu UFW防火墙规则与命令示例大全

在服务器安全领域&#xff0c;防火墙是守护网络安全的坚实盾牌。UFW&#xff08;Uncomplicated Firewall&#xff09;&#xff0c;即“不复杂的防火墙”&#xff0c;是一个运行在iptables之上的防火墙配置工具&#xff0c;它为Ubuntu系统默认提供了一个简洁的命令行界面&#x…

Linux高阶——1026—验证内存映射mmap函数使用

1、验证共享映射后修改文件内容&#xff0c;是否能够同步 先创建一个映射文件&#xff0c;写入数据 分为四个步骤 1、打开映射文件 设文件描述符&#xff0c;使用open函数 int fd; if((fdopen("mapfile",O_RDWR))-1) { perror("open failed");exit…

从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)

从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09; 文章目录 从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09;一、前言二、vue项目部署前配置1、vite.config.js 增加…

快速遍历包含合并单元格的Word表格

Word中的合并表格如下&#xff0c;现在需要根据子类&#xff08;例如&#xff1a;果汁&#xff09;查找对应的品类&#xff0c;如果这是Excel表格&#xff0c;那么即使包含合并单元格&#xff0c;也很容易处理&#xff0c;但是使用Word VBA进行查找&#xff0c;就需要一些技巧。…

智慧园区 | 数智引领,让智慧触手可及

随着科技的飞速发展&#xff0c;智慧园区正成为现代城市发展的重要方向之一。在智慧园区中&#xff0c;各种高科技手段被应用于园区的管理和服务&#xff0c;为园区的运营和居民的生活带来无限可能。 智慧园区管理平台是智慧园区建设的核心。它集聚了大数据、物联网、云计算等技…

基于uniapp微信小程序的旅游系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【分布式知识】分布式对象存储组件-Minio

文章目录 什么是minio核心特点&#xff1a;使用场景&#xff1a;开发者工具&#xff1a;社区和支持&#xff1a; 核心概念什么是对象存储&#xff1f;MinIO 如何确定对对象的访问权限&#xff1f;我可以在存储桶内按文件夹结构组织对象吗&#xff1f;如何备份和恢复 MinIO 上的…

iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?

众所周知&#xff0c;苹果品牌的设备自己有AirPlay的投屏功能&#xff0c;iPhone要投屏到MacBook只要连接同一网络&#xff0c;然后开启AirPlay就可以投屏。但其他品牌的手机没有AirPlay&#xff0c;怎么将手机屏幕投射到MacBook呢&#xff1f; 安卓系统的手机可以使用无线投屏…