pytorch库 03 基础知识

news2024/12/23 18:39:32

文章目录

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

官网 https://pytorch.org/

一、准备工作

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

import torch

print(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 os

class MyDate(Dataset):
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.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_dir
        return img, label

    def __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 SummaryWriter

test_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 = 0
    for data in test_loader:
        imgs, targets = data
        # print(imgs.shape)
        # print(targets)
        writer.add_images("Epoch:{}".format(epoch),
                         imgs, step)
        step = step + 1

writer.close()

二、tensorboard的使用

tensorboard一个是可视化工具

1、add_scalar()方法

from torch.utils.tensorboard import SummaryWriter

writer = 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 Image

writer = 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 SummaryWriter

img_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 SummaryWriter

img_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 transforms

writer = 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 transforms

dataset_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.coloradmin.cn/o/1858062.html

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

相关文章

聚观早报 | 荣耀Magic V Flip开售;亚马逊将升级Alexa

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月24日消息 荣耀Magic V Flip开售 亚马逊将升级Alexa HarmonyOS NEXT Beta发布 懂车帝上线独家片场计划 苹果正…

重学java 83.Java注解

As a failure,I met my last sound. —— 24.6.24 一、注解的介绍 1.引用数据类型: 类、数组、接口、枚举、注解 jdk1.5版本的新特性 一个引用数据类型 和类,接口,枚举是同一个层次的 引用数据类型:类、数组、接口、枚举、注解 2.作用: ① 说明&#xff1a;对代码进行说明,生…

怎么在大模型之上构建应用?构建人工智能上层应用的框架——langchain

“langchain&#xff0c;在大模型之上构建应用的脚手架” 在大模型之上构建应用需要很多的步骤&#xff0c;比如文档加载&#xff0c;数据库读取&#xff0c;大模型加载&#xff0c;以及各个环节的连接等。 因此&#xff0c;就有了langchain这个开发框架&#xff0c;它的功能…

【gif制作】Win下视频生成GIF;工具GifCam单色保存,灰度保存,调速,编辑删除帧添加文本

下载地址 https://blog.bahraniapps.com/gifcam/#download https://gifcam.en.softonic.com/ 界面功能 GifCam 简洁、小巧的 gif 录制软件。GifCam就像照相机一样位于所有窗口的顶部&#xff0c;可以移动它并调整其大小录屏所需的区域。 如图&#xff1a;空闲状态下窗口内…

8.项目结构——黑马程序员Java最新AI+若依框架项目

目录 前言一、后端1.ruoyi-admin2.ruoyi-common3.ruoyi-framework4. ruoyi-generator(可删除)5.ruoyi-quartz&#xff08;可删除&#xff09;5.ruoyi-system6. ruoyi-ui7.sql8.依赖关系9. 总结 二、前端三、SQL 前言 提示&#xff1a;本篇叙述若依前后端项目结构 一、后端 1…

Python使用策略模式绘制图片分析多组数据

趋势分析&#xff1a;折线图静态比较&#xff1a;条形图分布分析&#xff1a;箱线图离散情况&#xff1a;散点图 import matplotlib.pylab as plt from abc import ABC, abstractmethod import seaborn as sns import pandas as pd import plotly.graph_objects as go import p…

项目方案:社会视频资源整合接入汇聚系统解决方案(七)

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…

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

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

Spring Boot + Vue 全栈开发,都需要哪些前端知识?

Node.js默认安装的npm包和工具的位置&#xff1a;Node.js目录\node_modules 在这个目录下你可以看见 npm目录&#xff0c;npm本身就是被NPM包管理器管理的一个工具&#xff0c;说明 Node.js已经集成了npm工具 #在命令提示符输入 npm -v 可查看当前npm版本 npm -v 二、使用n…

用英文介绍成都:Chengdu, China’s New Blueprint MEGACITY

Chengdu, China’s New Blueprint MEGACITY Link: https://www.youtube.com/watch?va6DR5Hh4AHM Southwest China’s largest metropolis and one of its greenest big cities has a population of 21 million. Chengdu exemplifies Beijing’s quest to modernize the count…

SiC MOSFET的性能优势以及技术难点

碳化硅功率器件近年来越来越广泛应用于工业领域&#xff0c;不断地推陈出新&#xff0c;作为一种新型功率器件&#xff0c;与传统的硅基功率器件相比&#xff0c;在某些特定条件下具有独特的优势&#xff0c;但也存在一定的不足&#xff0c;似乎对于碳化硅元器件的普及还有一些…

JAVA并发编程【Semaphore】源码解析

文章目录 一、Semaphore基础概念二、接口限流场景模拟三、Semaphore源码解析3.1、Semaphore结构解析3.1.1、Sync源码3.1.2、NonfairSync源码3.1.3、FairSync源码 3.2、Semaphore重点方法源码解析 本章节将对Semaphore类中所有方法进行源码解析并提供部分代码案例。可以让读者全…

服务器win10server,python安装paddleocr的踩坑日记

最近由于需要图像文字识别的简单业务&#xff0c;研究了一下&#xff0c;一是用大厂的文字识别api&#xff0c;如百度腾讯等&#xff0c;但这种免费版只有有限的调用次数&#xff0c;如百度只有每月只有1000次调用额度&#xff0c;个人也够用&#xff0c;但由于业务量大&#x…

通天星CMSV6车载定位监控平台 point_manage/merge SQL注入致RCE漏洞复现

0x01 产品简介 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队,专注于为定位、无线视频终端产品提供平台服务,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。 0x02 漏洞概述 …

泛微E9开发 根据判断条件,控制字段的编辑/必填属性

根据判断条件&#xff0c;控制字段的编辑/必填属性 1、需求说明2、实现方法3、扩展知识点1. 注册钩子事件&#xff0c;指定动作完成后触发1.1 接口名称及参数说明1.2 案例 2. 改变单个字段显示属性(只读/必填等)2.1 参数说明2.2 案例 1、需求说明 当字段“填报人”和字段“姓名…

测试基础15:测试用例设计方法-场景设计(流程分析)

课程大纲 1、定义 系统多个功能串联形成业务流程&#xff0c;不仅需要验证正确的主流程&#xff0c;而且需要验证各个功能点各种异常情况。 2、应用场景 与因果图&判定表方法的相似之处&#xff1a;界面需手动填写的输入框少&#xff0c;基本只需选择有限的几个&#xff08…

小型数据中心是什么?如何建设?

在数字化时代&#xff0c;小型数据中心正成为许多企业和组织加强数据管理和服务扩展的理想选择。与传统大型数据中心相比&#xff0c;小型数据中心以其灵活性、高效性和相对较低的运营成本吸引着越来越多的关注。然而&#xff0c;要成功建设一个小型数据中心&#xff0c;并确保…

TC3xx启动的功能安全机制浅析(1)

目录 1.SM基本概念 2.芯片启动阶段safety相关解读 3.小结 之前描述TC3xx Boot Firmware逻辑时提到了功能安全的内容&#xff0c;但没有完全展开&#xff1b;启动阶段与功能安全相关的内容如下图所示&#xff1a; 其中&#xff0c; 灰色背景指在BootRom Fireware里的运行逻辑…

720漫游工具又双叒叕上新了一批新功能

一、720漫游全景图片上传支持「自定义水印」 全景图片素材上传支持自定义水印设置&#xff0c;通过自定义水印&#xff0c;可以在全景图片上打上自定义的水印图片保护用户版权利益&#xff0c;同时强化自身品牌露出。具体操作如下&#xff1a; 打开「创建720漫游作品页」-选择…

一文搞懂Linux命令行下载OneDrive分享文件

一文搞懂Linux命令行下载OneDrive分享文件 什么问题&#xff1f; 因为OneDrive有些坑&#xff0c;无法从分享界面获取真实下载链接&#xff0c;比如下面这个链接&#xff1a; https://connecthkuhk-my.sharepoint.com/:f:/g/personal/jhyang13_connect_hku_hk/EsEgHtGOWbJIm…