Pytorch中如何加载数据、Tensorboard、Transforms的使用
一、Pytorch中如何加载数据
在Pytorch中涉及到如何读取数据,主要是两个类一个类是Dataset、Dataloader
Dataset 提供一种方式获取数据,及其对应的label。主要包含以下两个功能:
如何获取每一个数据以及label
告诉我们总共有多少的数据
Dataloader,可以对数据进行打包,为后面的网络提供不同的数据形式。
二、Tensorboard的使用,用来观察训练结果
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("log")# writer.add_image()for i in range(100):writer.add_scalar("y=x", i, i)writer.close()
在Terminal中先切换到conda activate pytorch
使用命令 tensorboard --logdir=logs

TensorBoard的使用
1、使用add_image()方法
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
# 利用openCV中的numpy库可以获得numpy型的图片writer = SummaryWriter("log")
img_path = "../dataset/bees/26589803_5ba7000313.jpg"
img_PIL = Image.open(img_path) # 打开图片
img_array = np.array(img_PIL) # 图片转换
print(type(img_array)) # 打印图片类型
print(img_array.shape) # 打印图片格式writer.add_images("test", img_array, 2, dataformats='HWC') # 根据img_array.shape来指定,如果不指定dataformats就会报错
# y = 2x
for i in range(100):writer.add_scalar("y=2x", 2*i, i)writer.close()

三、Transforms的使用
transform表示对图片进行一些变换
python的用法 -> tensor数据类型
通过transform.ToTensor去解决两个问题:
transforms该如何使用(Python)
为什么我们需要Tensor的数据类型?

from torchvision import transforms
from PIL import Imageimg_path = "../dataset/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img)
运行后的结果
D:\tools\anaconda\envs\pytorch\python.exe D:/code/captcha_ocr-main/learn/transforms.py
tensor([[[0.5725, 0.5725, 0.5725, ..., 0.5686, 0.5725, 0.5765],[0.5725, 0.5725, 0.5725, ..., 0.5686, 0.5725, 0.5765],[0.5686, 0.5686, 0.5725, ..., 0.5686, 0.5725, 0.5765],...,[0.5490, 0.5647, 0.5725, ..., 0.6314, 0.6235, 0.6118],[0.5608, 0.5765, 0.5843, ..., 0.5961, 0.5843, 0.5765],[0.5725, 0.5843, 0.5922, ..., 0.5647, 0.5529, 0.5490]],[[0.4471, 0.4471, 0.4471, ..., 0.4235, 0.4275, 0.4314],[0.4471, 0.4471, 0.4471, ..., 0.4235, 0.4275, 0.4314],[0.4431, 0.4431, 0.4471, ..., 0.4235, 0.4275, 0.4314],...,[0.4000, 0.4157, 0.4235, ..., 0.4706, 0.4627, 0.4510],[0.4118, 0.4275, 0.4353, ..., 0.4431, 0.4314, 0.4235],[0.4235, 0.4353, 0.4431, ..., 0.4118, 0.4000, 0.3961]],[[0.2471, 0.2471, 0.2471, ..., 0.2588, 0.2627, 0.2667],[0.2471, 0.2471, 0.2471, ..., 0.2588, 0.2627, 0.2667],[0.2431, 0.2431, 0.2471, ..., 0.2588, 0.2627, 0.2667],...,[0.2157, 0.2314, 0.2392, ..., 0.2510, 0.2431, 0.2314],[0.2275, 0.2431, 0.2510, ..., 0.2196, 0.2078, 0.2000],[0.2392, 0.2510, 0.2588, ..., 0.1961, 0.1843, 0.1804]]])Process finished with exit code 0
加载tensor类型的图片:
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
img_path = "../dataset/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
writer = SummaryWriter("log")
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
writer.add_image("Tensor_img", tensor_img)
writer.close()
四、常见的transforms类的使用
- ToTensor类
将PIL图片转换成tensor图片。
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
# Tensor的使用
writer = SummaryWriter("log")
img_path = "../dataset/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
print(img)
tensor_trans = transforms.ToTensor() # 创建ToTensor()对象
tensor_img = tensor_trans(img) # 传入图片参数,将PIL图片转换成tensor图片
writer.add_image("Tensor_img", tensor_img)
writer.close()

2. Normalize类
对tensor类型的图片进行归一化处理。
Normalize的使用:归一化处理
公式:output[channel] = (input[channel] - mean[channel]) / std[channel]
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter# Tensor的使用
writer = SummaryWriter("log")
img_path = "../dataset/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
print(img)tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)writer.add_image("Tensor_img", tensor_img)# Normalize的使用
print(tensor_img[0][0][0]) # 归一化处理之前的数据
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(tensor_img)
print(img_norm[0][0][0]) # 归一化处理后的结果
writer.add_image("Normalize", img_norm)writer.close()


3. Resize类:
重置图片大小。
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter# Tensor的使用
writer = SummaryWriter("log")
img_path = "../dataset/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
print(img)tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)writer.add_image("Tensor_img", tensor_img)print(tensor_img[0][0][0]) # 归一化处理之前的数据
trans_norm = transforms.Normalize([1, 3, 5], [3, 2, 1])
img_norm = trans_norm(tensor_img)
print(img_norm[0][0][0]) # 归一化处理后的结果
writer.add_image("Normalize", img_norm)writer.close()# Resize的使用:重置图片大小
print(img.size) # (500, 464)
trans_resize = transforms.Resize((512, 512))img_resize = trans_resize(img)
print(img_resize) # <PIL.Image.Image image mode=RGB size=512x512 at 0x2A17E774248> img_resize = tensor_trans(img_resize)
writer.add_image("Resize", img_resize, 0)
print("" + img_resize)
writer.close()


4. Compose的使用
等比例缩放。
Compose的使用:整体缩放,不改变高宽比例
Compose()中的参数需要的是一个列表,列表中的数据需要的是transforms类型。
即 Compose([transforms参数1, transforms参数2, …])
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter# Tensor的使用
writer = SummaryWriter("log")
img_path = "../dataset/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
print(img)tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)writer.add_image("Tensor_img", tensor_img)print(tensor_img[0][0][0]) # 归一化处理之前的数据
trans_norm = transforms.Normalize([1, 3, 5], [3, 2, 1])
img_norm = trans_norm(tensor_img)
# print(img_norm[0][0][0]) # 归一化处理后的结果
writer.add_image("Normalize", img_norm)# Resize的使用:重置图片大小
print(img.size) # (500, 464)
trans_resize = transforms.Resize((512, 512))img_resize = trans_resize(img)
print(img_resize) # <PIL.Image.Image image mode=RGB size=512x512 at 0x2A17E774248># Compose的使用
img_resize = tensor_trans(img_resize)
writer.add_image("Resize", img_resize, 0)
# print(img_resize)
trans_resize_2 = transforms.Resize(1024)
trans_compose = transforms.Compose([trans_resize_2, tensor_trans])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)writer.close()
5.RandomCrop类的使用
随机裁剪。
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter# Tensor的使用
writer = SummaryWriter("log")
img_path = "../dataset/bees/10870992_eebeeb3a12.jpg"
img = Image.open(img_path)
print(img)tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)writer.add_image("Tensor_img", tensor_img)print(tensor_img[0][0][0]) # 归一化处理之前的数据
trans_norm = transforms.Normalize([1, 3, 5], [3, 2, 1])
img_norm = trans_norm(tensor_img)
# print(img_norm[0][0][0]) # 归一化处理后的结果
writer.add_image("Normalize", img_norm)# Resize的使用:重置图片大小
print(img.size) # (500, 464)
trans_resize = transforms.Resize((512, 512))img_resize = trans_resize(img)
print(img_resize) # <PIL.Image.Image image mode=RGB size=512x512 at 0x2A17E774248># Compose的使用:
img_resize = tensor_trans(img_resize)
writer.add_image("Resize", img_resize, 0)
# print(img_resize)
trans_resize_2 = transforms.Resize(1024)
trans_compose = transforms.Compose([trans_resize_2, tensor_trans])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)# RendomCrop类的使用:随机裁剪
# trans_random = transforms.RandomCrop(512)
trans_random = transforms.RandomCrop(1000, 500)
trans_compose_2 = transforms.Compose([trans_random, tensor_trans])
for i in range(10):img_crop = trans_compose_2(img)# writer.add_image("RancomCrop", img_crop, i)writer.add_image("RancomCropHW", img_crop, i)writer.close()

相关文章:
Pytorch中如何加载数据、Tensorboard、Transforms的使用
一、Pytorch中如何加载数据 在Pytorch中涉及到如何读取数据,主要是两个类一个类是Dataset、Dataloader Dataset 提供一种方式获取数据,及其对应的label。主要包含以下两个功能: 如何获取每一个数据以及label 告诉我们总共有多少的数据 Datal…...
python如何使用打开文件对话框选择文件?
python如何使用打开文件对话框选择文件? ━━━━━━━━━━━━━━━━━━━━━━ 在Python中,可以使用Tkinter库中的filedialog子模块来打开一个文件对话框以供用户选择文件。以下是一个简单的例子,演示如何使用tkinter.filedialog打…...
虚拟化和容器
文章目录 1 介绍1.1 简介1.2 虚拟化工作原理1.3 两大核心组件:QEMU、KVMQEMUKVM 1.4 发展历史1.5 虚拟化类型1.6 云计算与虚拟化1.7 HypervisorHypervisor分为两大类 1.8 虚拟化 VS 容器 2 虚拟化应用dockerdocker 与虚拟机的区别 K8Swine 参考 1 介绍 1.1 简介 虚…...
LeetCode-78-子集
题目描述: 给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 题目链接:LeetCode-78-子集 解题思路:递归回溯 题…...
js对象转json文件
目录 需求1.首先寻找类似需求的数据2.对数据进行转换3.将转换后的数据转为json文件4.完整代码 需求 需求:在做项目时,遇到了需要制作地址列表的功能,这一般都会用到一些开源的组件库,但是有个问题是不同组件库之间的城市列表数据结…...
【免费模板】2023数学建模国赛word+latex模板免费分享
无需转发 免费获取2023国赛模板,获取方式见文末 模板文件预览如下: 模板参考格式如下: (题目)XXXXXX 摘 要: 开头段:需要充分概括论文内容,一般两到三句话即可,长度控…...
基于HBuilder X平台下的 驾校报名考试管理系统 uniapp 微信小程序3n9o5
本课题研究的是基于HBuilder X系统平台下的驾校管理系统,开发这款驾校管理系统主要是为了帮助学员可以不用约束时间与地点进行查看教练信息、考场信息等内容。本文详细讲述了驾校管理系统的界面设计及使用,主要包括界面的实现、控件的使用、界面的布局和…...
电商3D资产优化管线的自动化
如果你曾经尝试将从 CAD 程序导出的 3D 模型上传到 WebGL 或 AR 服务,那么可能会遇到最大文件大小、永无休止的进度条和糟糕的帧速率等问题。 为了创作良好的在线交互体验,优化 3D 数据的大小和性能至关重要。 这也有利于你的盈利,因为较小的…...
Android 大图显示优化方案-加载Gif 自定义解码器
基于Glide做了图片显示的优化,尤其是加载Gif图的优化,原生Glide加载Gif图性能较低。在原生基础上做了自定义解码器的优化,提升Glide性能 Glide加载大图和Gif 尤其是列表存在gif时,会有明显卡顿,cpu和内存占用较高&…...
Leetcode.664 奇怪的打印机
题目链接 Leetcode.664 奇怪的打印机 hard 题目描述 有台奇怪的打印机有以下两个特殊要求: 打印机每次只能打印由 同一个字符 组成的序列。每次可以在从起始到结束的任意位置打印新字符,并且会覆盖掉原来已有的字符。 给你一个字符串 s ,你…...
正中优配:散户怎么实现T+0?散户在股市上怎么变相T+0?
T0是指当天买入的标的物,在当天就能卖出的买卖方式,其中,在a股市场上,散户能够通过一些办法直接地完成T0买卖方式,接下来,正中优配为大家预备了相关内容,以供参阅。 散户在股票市场上࿰…...
ZooInspector
一、在window,使用我们先打开Zookeeper,目录bin下的zkServer.cmd,把Zookeeper运行起来 编辑https://img.111com.net/attachment/art/187687/5f0c25fbe580c.png 二、可以使用目录bin下的zkCli.cmd,查询Zookeeper数据的方式,但是…...
2023高教社杯 国赛数学建模B题思路 - 多波束测线问题
1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播, 在不同界面上产生反射, 利用这一原理,从测量船换能器垂直向海底发射声波信 号,并记录从声波发射到信…...
【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(9 月 4 日论文合集)
文章目录 一、检测相关(8篇)1.1 Impact of Image Context for Single Deep Learning Face Morphing Attack Detection1.2 A Theoretical and Practical Framework for Evaluating Uncertainty Calibration in Object Detection1.3 What Makes Good Open-Vocabulary Detector: A…...
游戏优化注意点
特效性能分析: 1、粒子数量太多,这个会对CPU的耗时产生一定的压力。 2、粒子的size太大,这样容易导致渲染的像素数量非常高。 3、Overdraw非常高,当场上粒子数非常高导致叠层很高,会造成Overdraw很高,这会…...
【unity3D】如何修改相机的默认视角
💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的如何修改相机的默认视角 如何修改相机的默认视角 Game窗口运行的话视角是这样的: 此时Scene窗口的视角是这样的&…...
Docker的初级使用
Docker的初级使用 Docker的安装1.1 如果之前安装过旧版本的Docker,可以使用下面命令卸载:1.2.安装docker1.3.启动docker1.4.配置镜像加速2.CentOS7安装DockerCompose2.1.下载2.2.修改文件权限2.3.Base自动补全命令:3.Docker镜像仓库3.1.简化版镜像仓库3.2.带有图形化界面版本…...
minimumLineSpacing和minimumInteritemSpacing问题研究
结论:minimumLineSpacing和minimumInteritemSpacing问题研究 (1)如果cell的宽度是固定的,方向是水平时, 1 3 5 2 4 6 minimumLineSpacing 是 12 到 34的距离 minimumInteritemSpacing 是1到2的距离 (2)如果cell的宽度是不固定的࿰…...
【操作系统】聊聊Linux内存工作机制
内存主要是用来存储系统和应用程序的指令、数据、缓存等 内存映射 内存是需要安全机制保护的,所以只有内核才可以直接访问物理内存。进程如果要访问内存需要通过独立的虚拟地址空间。 虚拟地址空间其实包含两部分。一部分是内核空间,另一部分就是用户…...
MySQL索引的类型有哪些?
分析&回答 从功能逻辑角度,可分为: 普通索引 INDEX(普通索引) ALTER TABLE table_name ADD INDEX index_name ( column )唯一索引 UNIQUE(唯一索引) ALTER TABLE table_name ADD UNIQUE (column)主键索引 PRIMARY KEY(主键索引…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
云原生时代的系统设计:架构转型的战略支点
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、云原生的崛起:技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深,传统的 I…...
