pytorch快速入门(一)—— 基本工具及平台介绍

news2024/9/27 21:26:41

前言

        该pytorch学习笔记应该配合b站小土堆《pytorch深度学习快速入门教程》使用

        环境配置:Anaconda             Python编译器:pycharm、jupyter 

                 

  • 两大法宝函数

           dir():知道包中有什么东西(函数 / 属性...)

           help():查看函数的使用说明

1. Dataset类代码实战

from torch.utils.data import Dataset
from PIL import Image #PIL 图像处理第三方库pillow
import os

# 创建类
class MyData(Dataset):

    # __init__ 创建对象时自动调用 用于初始化对象属性
    def __init__(self,label,path):   #实例方法,默认第一个参数self需要接收到一个实例
        self.label = label
        self.path = path #私有属性公有化(路径)
        self.img_path = os.listdir(self.path) #获取所有列表地址

    # __getitem__ 对实例对象 根据index进行索引
    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.path,img_name) #路径拼接
        img = Image.open(img_item_path) #获取对应图像信息
        label = self.label
        return img,label

    # 返回列表长度
    def __len__(self):
        return len(self.img_path)


# 创建实例
ants_dataset = MyData("ants",r"D:\python code\pythonProject\dataset\train\ants")
len(ants_dataset)
img,label = ants_dataset[5]
img.show()

bees_dataset = MyData("bees",r"D:\python code\pythonProject\dataset\train\bees")

# 拼接数据集
train_dataset = ants_dataset + bees_dataset
len(train_dataset)

 2.Tensorboard

       TensorBoard 是一组用于数据可视化的工具 

  • TensorBoard的使用

        主要是使用SummaryWriter类中的 .add_image(图片可视化) 以及 .add_scalar(数据可视化)方法,一般来说,只接受tensor或numpy类型的图像数据

from tensorboardX import SummaryWriter  #导入类

########## .add_scalar数据可视化 ############
writer = SummaryWriter("logs") #创建实例 logs为文件名

for i in range(100):
    writer.add_scalar("y=2x",2*i,i)

writer.close()


########### .add_image图像可视化  ###########

writer = SummaryWriter("logs")

writer.add_image(标题,tensor或numpy数据)

writer.close()

3.Transforms

 3.1 Tensor数据类型的意义

        Tensor数据类型包装了 神经网络理论所需要的一些参数

 3.2 常见的transform工具

  • transform如何使用

        transform是一个工具箱,里面有很多 类(如ToTensor、resize),一般我们根据类去实例化出具体的对象,然后再利用__call__函数,将对象当作函数调用

    3.2.1 数据类型转换

             ToTensor:将numpy或PIL Image类型的图片 转化为 tensor类型 

             ToPILImage:将tensor或numpy数据类型 转化为 PIL Image类型

from torchvision import transforms
from PIL import Image
img_path = r"D:\python code\pythonProject\dataset\train\ants\0013035.jpg"
img = Image.open(img_path)
print(img)


# 将PIL Image类型(图片)转化为tensor
tensor_trans = transforms.ToTensor() # 创建实例(工具)
tensor_img = tensor_trans(img)       # 利用call内置方法 像函数一样调用实例(使用工具)

   3.2.2  其他

  • 注意事项:1.关注输入输出类型       2.学会看官方文档(按住CTRL点相应函数)
方法transform工具说明input
归一化Normalize

对数据进行标准化处理        output = \frac{input - mean}{std}

实例化:mean std列表

调用:tensor类型

规格调整 Resize调整输入图片的规格(大小)

实例化:序列

调用:PIL类型

组合Compose

将多个transforms变换组合在一起,

并按照顺序执行

实例化:

含transform的list

随机裁剪RandomCrop

根据给定规格随机裁剪图片

实例化:序列

  • 代码示例
from PIL import Image
from torchvision import transforms
from tensorboardX import SummaryWriter

writer = SummaryWriter("logs")
img = Image.open(r"D:\python code\pythonProject\image\OIP-C.jpg")
print(img)

# ToTensor
trans_tensor = transforms.ToTensor()
tensor_img = trans_tensor(img)

writer.add_image("ToTensor",tensor_img) #用Tensorboard可视化

# Normalize 归一化
print(tensor_img[0],[0],[0]) #归一化之前
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) #图片为RGB三通道,所以三个均值,三个标准差
norm_img = trans_norm(tensor_img)
print(tensor_img[0],[0],[0]) #归一化之后

writer.add_image("Normalize",norm_img) #用Tensorboard可视化

# Resize 调整规格
print(img.size) #img为PIL数据类型
trans_resize = transforms.Resize((512,512))# 将size调整为512*512
resize_img = trans_resize(img) # resize_img为PIL数据类型
print(resize_img)
resize_img = trans_tensor(resize_img) # resize_img转换为tensor数据类型
writer.add_image("Resize",resize_img,0)


# Compose 组合
trans_resize2 = transforms.Resize((256,1024)) #调整规格
trans_compose = transforms.Compose([trans_tensor,trans_resize2]) #先转换数据类型 再调整规格
compose_img = trans_compose(img) #调用实例
writer.add_image("Compose",compose_img,1)


# RondomCrop 随机裁剪
trans_random = transforms.RandomCrop(100)
trans_compose2 = transforms.Compose([trans_random,trans_tensor])
for i in range(10):
    randomcrop_img = trans_compose2(img)
    writer.add_image("RandomCrop",randomcrop_img,i)


writer.close()
#最后在下方终端输入 tensorboard --logdir=文件名(logs) 即可打开tensorboard

4.torchvision中的数据集

    torchvision专门用于处理图像,其主要包含三个部分:model包(提供了训练好的模型)、dataset包(提供大量数据集)、transform包(对Tensor或PIL image图像进行转换处理)

  • dataset中的内置数据集使用 —— 以CIFAR-10数据集为例

CIFAR-10数据集:

         由 10 个类的 60000 张 32x32 彩色图像组成,每个类有 6000 张图像。

         有 50000 张训练图像和 10000 张测试图像。

 注:图像.show()   只能对PIL图像使用,如果是含PIL和其它参数的元组,无法使用

  • 代码示例 

        在 torchvision.datasets.CIFAR10()的参数中可以直接选用设定好的transform工具,直接导入处理好的数据

import torchvision
from tensorboardX import SummaryWriter

# 与transforms进行联动
dataset_transfrom = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor(),
    torchvision.transforms.Resize(128)]) #先Tensor 后调整大小

# 导入数据集 —— 训练集与测试集(注意后面的参数)
train_set = torchvision.datasets.CIFAR10(root=r"D:\python code\pythonProject\dataset",
                                         train = True,download=True,transform=dataset_transfrom)
test_set = torchvision.datasets.CIFAR10(root=r"D:\python code\pythonProject\dataset",
                                        train = False,download=True,transform=dataset_transfrom)

writer = SummaryWriter("logs2")
for i in range(10):
    img,target = test_set[i] #等号后 为 含tensor图像信息和图像标签target的元组
    writer.add_image("torchvision",img,i)

writer.close() #!!!不要忘记关闭读写

5.dataloader的使用

简介:

        Dataloader是一个数据读取机制,它由数据集(dataset)和采样器(sampler)两个模块组成。主要是根据sampler提供的索引在dataset中读取数据。

        Dataloader的主要目的是将数据分批读取计算,节省显存

  • 示例
import torchvision
from torch.utils.data import DataLoader
from tensorboardX import SummaryWriter

#准备测试的数据集(主要是说明数据集的位置)
test_data = torchvision.datasets.CIFAR10(root=r"D:\python code\pythonProject\dataset",
                                         train=False,transform=torchvision.transforms.ToTensor())

# batch_size:每次抽出多少样本     shuffle:是否打乱样本顺序
test_loader = DataLoader(dataset=test_data,batch_size=64,shuffle=True,num_workers=0)

# 查看每次抽取出的样本
writer = SummaryWriter("dataloader")
step = 0
for data in test_loader:
    imgs,targets = data
    writer.add_images("test_data",imgs,step)
    step = step + 1

writer.close()
#最后在下方终端输入 tensorboard --logdir=文件名 即可打开tensorboard

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

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

相关文章

串口数据波形显示工具对比

目录 1 Serial Port Plotter 1.1 界面 1.2 简介 1.3 使用方法 1.3.1 单通道示例 1.3.2 多通道示例 2 serialplot 2.1 界面 2.2 简介 2.3 使用方法 1 Serial Port Plotter 1.1 界面 1.2 简介 这是一款开源串口显示工具,项目链接: GitHub - C…

待机模式中WKUP上升沿模拟开机与关机

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 前言 待机模式 代码 wkup.h wkup.c main.c 使用注意 前言 建议先阅读下面的博客中待机模式部分。本博客主要分享代码-基于待机模式WKUP引脚的上升沿实现类似长按开机与关机的功能…

TikTok云手机解决运营效率低、封号问题

TikTok,一个拥有30亿下载量、10亿活跃用户的全球热门平台,已成为众多出海商家的首选运营阵地。其玩法与国内抖音相似,为运营者提供了熟悉的操作环境,降低了上手难度。然而,随着TikTok的快速发展,运营者们也…

德之匠信息化阶段模型

今天适逢仲秋佳节,祝大家幸福安康! 春生、夏长、秋天也是我们作为知识工作者最开心的季节。经历了项目实践、课题研究,终于能思有一得,是世上第一等的好事。 这个题目的背景是这样。近期我们在做一批中长期信息化项目的分析和总…

深度学习基础案例5--运用动态学习率构建CNN卷积神经网络实现的运动鞋识别(测试集的准确率84%)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 前几天一直很忙,一直在数学建模中,没有来得及更新,接下来将恢复正常这一次的案例很有意思:在学习动态调整…

【IP协议】解决 IP 地址不够用的问题(IP地址管理:动态分配、NAT、Ipv6)

文章目录 方案一、动态分配 IP 地址方案二、NATNAT 机制的缺点 方案三、IPv6 方案一、动态分配 IP 地址 一个设备上网就分配 IP,不上网就先不分配(权宜之计) 方案二、NAT 网络地址转换 以一当千,使用一个 IP,代表一大…

Golang | Leetcode Golang题解之第404题左叶子之和

题目: 题解: func isLeafNode(node *TreeNode) bool {return node.Left nil && node.Right nil }func sumOfLeftLeaves(root *TreeNode) (ans int) {if root nil {return}q : []*TreeNode{root}for len(q) > 0 {node : q[0]q q[1:]if no…

anaconda 离线安装PySimpleGUI

下载离线py包 PySimpleGUI-5.0.6-py3-none-any.whl(官网)pyasn1-0.6.1-py3-none-any.whl(清华镜像)rsa-4.9-py3-none-any.whl(清华镜像) 打开Anaconda Prompt 测试 # -*- utf-8 -*- import PySimpleGUI …

同城找搭子小程序有哪些?找搭子社交软件测评笔记分享

寻找搭子不再迷茫!今日测评几款热门找搭子小程序,为你开启全新社交体验。真实体验,深度剖析,帮你找到最适合的搭子平台,快来一探究竟。 1. 咕哇找搭子小程序:这是一个实名制的找搭子交友平台。正是由于实名…

任务通知(Task Notifications)

任务通知简介 相对于以前使用 FreeRTOS 内核通信的资源, 必须创建队列、 二进制信号量、计数信号量或事件组的情况, 使用任务通知显然更灵活。 按照 FreeRTOS 官方的说法, 使用任务通知比通过信号量等 IPC 通信方式解除阻塞的任务要快 45%&a…

基于RFID的门禁系统的设计(论文+源码)

1系统方案设计 通过需求分析,基于RFID的门禁系统总体设计框图。系统采用STM32单片机作为系统主控核心,利用独立按键与RFID识别模块能够实现门禁系统密码与IC卡开门功能。WiFi模块实现系统与手机APP的通信,用户可以通过手机APP进行门禁开关操…

怀孕之天赋共享:提高智商

想办法怀个哪吒享受三年,哈哈哈哈哈 话说我们有个同事,是属于憨得有点愣那种,情商也低。怀孕以后突然有一天我觉得她聪明了好几个数量级!反应也快了说话也会说了,我说是不是她的宝宝给她提高了智商?后来生…

Redis学习——数据不一致怎么办?更新缓存失败了又怎么办?

文章目录 引言正文读写缓存的数据一致性只读缓存的数据一致性删除和修改数据不一致问题操作执行失败导致数据不一致解决办法 多线程访问导致数据不一致问题总结 总结参考信息 引言 最近面试快手的时候被问到了缓存不一致怎么解决?一开始还是很懵的,因为…

Git 的使用以及vscode 下git 的使用(一)

1、git 和svn Git 和 SVN 都是版本控制系统,它们都用于管理代码的版本,但它们之间有一些显著的区别: 分布式 vs 集中式:Git 是一个分布式版本控制系统,这意味着每个开发者都拥有整个代码库的完整副本,并且…

3DTiles —— 三维瓦片

文章目录 一、glTF二、3DTiles1.3dTiles的特点2.一个简单的3dTiles数据示例3.Tileset——(三维)瓦片数据集——.json顶级属性概览(必需):asset、root、geometricError其他属性root、children、refine、content、boundingVolumechildrenrefine 细化bounding volumes …

大棚分割数据集,40765对影像,16.9g数据量,0.8米高分二,纯手工标注(arcgis标注)的大规模农业大棚分割数据集。

数据集名称: )“Greenhouse Segmentation Dataset (GSD)” 数据集规模: 包含40,765对用于大棚分割的影像数据,每对影像包括一张原始图像和相应的分割标签图。 数据量: 总数据量约为16.9GB,适合存储在现…

推荐这款神器:Perplexity

今天推荐是一款AI搜索引擎,还支持gpt-4模型的使用,虽然4小时只能使用5次,但是相比于常规的搜索引擎,在某些方面还是很强的,个人感觉优于newbing。 页面简洁,没有广告,内容丰富,功能…

JVM面试真题总结(十)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 是否所有对象都分配在堆内存上? 在Java中,对象主要是…

SVM——支持向量机的学习入门

1、推荐文章 1、一文看懂SVM算法 2、图解机器学习|支持向量机模型详解 3、支持向量机的直观理解 2、分类问题 假设你的大学开设了一门机器学习(ML)课程。课程导师发现数学或统计学好的学生表现最佳。随着时间的推移,积累了一些数据&…

Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询: 定义:关联查询又叫连接查询 常见:内连接/外连接/自连接 1.内连接(无存在主从表) 语法:inner join ...on 定义:组合两个表的记录,返回关联字段相符的记录,也就是返…