小土堆pytorch学习

embedded/2024/10/11 13:19:47/

土堆视频链接

1. 两大函数

1.1 dir函数

dir函数返回一个属性列表,其中列表的元素都是字符串格式。

  •    对于模块对象:返回模块的所有属性(变量名和方法)
  •    对于类对象:返回这个类的属性,以及其所有父类(包括父类的父类)的属性
  •   对于其它对象(实例对象):返回这个实例对象的属性,实例对象类的属性,以及这个类的所有父类(包括父类的父类)的属性。

1.2 help() 函数

help() 函数用于查看函数或模块用途的详细说明。

输入:help(Dataset) 与 Dataset?? 有相同的作用;

2.数据集

torch.utils.dataPyTorch提供的一个模块,用于处理和加载数据。该模块提供了一系列工具类和函数,用于创建、操作和批量加载数据集。

下面是 torch.utils.data 模块中一些常用的类和函数:

  •  Dataset: 定义了抽象的数据集类,用户可以通过继承该类来构建自己的数据集。Dataset 类提供了两个必须实现的方法:__getitem__ 用于访问单个样本,__len__ 用于返回数据集的大小。
  • TensorDataset: 继承自 Dataset 类,用于将张量数据打包成数据集。它接受多个张量作为输入,并按照第一个输入张量的大小来确定数据集的大小。
  • DataLoader: 数据加载器类,用于批量加载数据集。它接受一个数据集对象作为输入,并提供多种数据加载和预处理的功能,如设置批量大小、多线程数据加载和数据打乱等。
  • Subset: 数据集的子集类,用于从数据集中选择指定的样本。
  • random_split: 将一个数据集随机划分为多个子集,可以指定划分的比例或指定每个子集的大小。
  • ConcatDataset: 将多个数据集连接在一起形成一个更大的数据集。
  • get_worker_info: 获取当前数据加载器所在的进程信息。

3.tensorboard的使用:

TensorBoard是由Google开发的一个可视化工具,旨在帮助用户理解和调试深度学习模型的训练过程。PyTorch提供了一个名为SummaryWriter的接口,用于将各种类型的数据写入TensorBoard中。在TensorBoard中,用户可以通过直观的图表和可视化界面来浏览、比较和分析训练过程中的指标、学习曲线和特征图等信息。

在TensorBoard中,常见的可视化内容包括训练/验证损失曲线、学习率曲线、精度曲线、直方图和散点图等。通过这些可视化工具,用户可以更好地理解模型训练过程中的变化和趋势,进而采取合适的策略来优化模型性能和训练速度。

3.1 使用tensorboard.SummaryWriter.add_scaltar来可视化数据:

add_scalar()的使用(常用来绘制train/val loss):先创建一个SummaryWriter的实例,如writer = SummaryWriter('logs'),然后调用其方法,writer.add_scalar(tag, scalar, step)。最后记得关闭SummaryWriter。

from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")# writer.add_image()# y = x
for i in range(100):writer.add_scalar("y = 3x", 3*i, i)
'''
def add_scalar(self,tag,scalar_value,global_step=None,walltime=None,new_style=False,double_precision=False,):tag是标题,scalar_value是y轴,global_step是x轴
'''writer.close()

在终端输入: tensorboard --logdir=logs --port=6007 可在浏览器中查看可视化图像:
注意:等号两边不能留有空格,logs是 SummaryWriter("logs") 保存的路径文件。
想安装某个模块,可以直接在Pycharm的项目终端中用pip命令安装:
例如: pip install tensorboard

3.2 使用tensorboard.SummaryWriter.add_image来显示图片:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter("logs")
img_path = r"E:\python_projects\Pytorch学习\小土堆学习\data\train\bees_image\85112639_6e860b0469.jpg"
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)print(type(img_array))
print(img_array.shape)writer.add_image("train", img_array, 1, dataformats='HWC')
'''def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW"):
'''# y = x
for i in range(100):writer.add_scalar("y = 3x", 3*i, i)
'''
def add_scalar(self,tag,scalar_value,global_step=None,walltime=None,new_style=False,double_precision=False,):tag是标题,scalar_value是y轴,global_step是x轴
'''writer.close()

4. transforms

之前用的工具都来自torch.utils,本次课开始接触torchvision;
transforms主要作用是对图片进行变换

4.1  Pycharm的操作小技巧

在PyCharm中按住Ctrl键然后点击从外部引入的对象可以查看源码

在pycharm中查找某个功能的快捷键步骤:

可以使用PyCharm界面左侧的structure按钮查看transforms的结构:由许多类定义组成的模块

 open-cv的下载:在pycharm的终端输入:

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

 open-cv读出的图像是numpy类型

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms# 绝对路径:E:\python_projects\Pytorch学习\小土堆学习\dataset\train\ants\0013035.jpg
# 相对路径:dataset/train/ants/0013035.jpg
img_path = "dataset/train/ants/0013035.jpg"
PIL_img = Image.open(img_path)
print(type(PIL_img))'''
class ToTensor:Convert a PIL Image or ndarray to tensor and scale the values accordingly.
'''
tensor_trans = transforms.ToTensor() # 定义一个ToTensor实例,创建具体的工具
tensor_img = tensor_trans(PIL_img) #将PIL图像对象转化为tensor对象
print(type(tensor_img))writer = SummaryWriter("logs")
writer.add_image("Tensor_img", tensor_img)
'''def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW"):
'''
writer.close()

在终端输入:tensorboard --logdir=logs 可查看图片

4.2  小结:目前学过的3种打开图片并往SummaryWriter类传参的方式:

  1. PIL.Image.open打开(得到 PIL类型),np.array转换
  2. PIL.Image.open打开,transforms.ToTensor转换
  3. opencv打开(这个打开就是ndarray类型)

 

5. 实用技巧:

5.1 调用魔法函数 __call__

实例化一个类对象后,调用该实例化对象(后面不调用该类的其他方法,那么该实例化对象会自动调用魔法函数__call__

class Person:def __call__(self, name):print("__call__" + " hello " + name)def hello(self, name):print("hello" + name)person = Person()
person("Lisi")
person.hello("Zhansan")class Person2:def __init__(self, name):self.name = namedef __call__(self):print("__call__" + " hello " + self.name)def hello(self):print("hello" + self.name)person2 = Person2("LY")
person2.hello()
person2()
'''实例化一个类对象后,调用该实例化对象(后面不调用该类的其他方法,那么该实例化对象会自动调用魔法函数__call__'''
person2.__call__()

 

5.2 pycharm小技巧,忽略大小写:

5.3 在自己写代码时注意什么,怎么进行学习:

6. torchvision 的数据集(datasets)的使用:

6.1 如何下载数据集

# first:下载数据集,下载的数据集中的图片是PIL类型
# import torchvision
#
# train_dataset = torchvision.datasets.CIFAR10(root="./CIFAR10_dataset", train=True, download=True)
# test_dataset = torchvision.datasets.CIFAR10(root="./CIFAR10_dataset", train=False, download=True)
#
# print(test_dataset[0])
#
# print("test_dataset.classes", test_dataset.classes)
#
# img, target = test_dataset[0]
# print("img", img)
# print("target", target)
# print("test_dataset.classes[target]", test_dataset.classes[target])
# img.show()

6. 2 将下载的数据集的类型转化为tensor类型

# second:将下载的数据集的类型转化为tensor类型import torchvision
from torch.utils.tensorboard import SummaryWriterdataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()
]) #将数据类型转化为tensor类型train_dataset = torchvision.datasets.CIFAR10(root="./CIFAR10_dataset", train=True, transform=dataset_transform,  download=True)
test_dataset = torchvision.datasets.CIFAR10(root="./CIFAR10_dataset", train=False, transform=dataset_transform, download=True)# print(test_dataset[0]) #输出的是tensor类型writer = SummaryWriter("dataset_transformers_logs")
for i in range(10):img, target = test_dataset[i]writer.add_image("test_dataset", 

http://www.ppmy.cn/embedded/34807.html

相关文章

2024年5月6日优雅草蜻蜓API大数据服务中心v2.0.3更新

v2.0.3更新 2024年5月6日优雅草蜻蜓API大数据服务中心v2.0.3更新-修复改版后搜索框漏掉的bug-增加搜索框 提示:优雅草大数据中心已经 上线137天 稳定运行 1181555 次 累积调用 目前大数据中心用户呈现增长趋势,目标2024年11月底突破1亿次调用&#xf…

Linux 操作系统线程

目录 一、线程 1.1线程的基本概念 1.2 线程相关的API函数 1.2.1 线程的创建 1.2.2 线程退出 1.2.3 线程等待函数 1.2.4 获取线程ID 1.2.5 线程取消 1.2.6 线程的清理函数 一、线程 1.1线程的基本概念 线程是属于进程;一个进程可以有多个线程&#xff…

前端面试题(二)

面试形式:线上面试(不露脸):时长40分钟 面试评价:由易到难,由细到全,比较不错 面试官:项目经理 面试官提问(面试题): 1、聊聊最近写的这个项目…

同创优配正规股票港股市场炒股加仓!中国资产,火了

查查配近日,受国内利好政策不断、全球资金对中国市场信心提升等多重因素影响,市场风险偏好明显上升,A股、港股市场均表现强劲,上证指数站上3100点,恒生指数也上演九连阳,创下2018年以来的最长连涨纪录。从资金动向来看,机构加仓明显,北向资金持续净买入,A股ETF也被大幅加仓,部分…

学习中遇到的问题

1.UFUNCTION() 不是所有函数都能加UFUNCTION()修饰,涉及UE反射机制。 2.初始化用{} 初始化列表 3.创建C文件时修改了路径 这时.cpp文件会报错,只需删掉前面多余路径即可 4.函数的移除 1.虚幻5.1 UUserWidget不再包含OnLevelRemovedFromWorld() 转而使用…

Vue前端环境准备

vue-cli Vue-cli是Vue官方提供的脚手架,用于快速生成一个Vue项目模板 提供功能: 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境:NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs(已经安装就不用了) node-…

[LitCTF 2023]Ping、[SWPUCTF 2021 新生赛]error、[NSSCTF 2022 Spring Recruit]babyphp

[LitCTF 2023]Ping 尝试ping一下127.0.0.1成功了,但要查看根目录时提示只能输入IP 查看源代码,这段JavaScript代码定义了一个名为check_ip的函数,用于验证输入是否为有效的IPv4地址。并且使用正则表达式re来匹配IPv4地址的格式。 对于这种写…

笔记---DFS,深度优先搜索

深度优先搜索乃是注重深度,会把一条路径优先全部搜完然后再去回溯,再去搜其他路径 连通性模型 与BFS中的Flood Fill相似 AcWing.1112.迷宫 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由 n∗n 的格点组成&#xff…