pytorch入门-TensorBoard和Transforms
TensorBoard
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms# python的用法 -》 tensor数据类型
# 通过transforms.ToTensor 去解决两个问题
# 1. transforms该如何使用(python)
# 2. 为什么需要Tensor的数据类型# 就对路径 = D:\PyCharm\learn_torch\dataset\train\ants_image\0013035.jpg
# 相对路径 = dataset\train\ants_image\0013035.jpg
img_path = r"dataset\train\ants_image\0013035.jpg"
img_path_abs = r"D:\PyCharm\learn_torch\dataset\train\ants_image\0013035.jpg"img = Image.open(img_path)
writer = SummaryWriter("logs")
# print(img)# 1. transforms该如何使用(python)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
# print(tensor_img)writer.add_image("Tensor_img", tensor_img)writer.close()
Transform
from PIL import Image#from PIL import Image 是正确导入PIL(Python Imaging Library)包中的 Image 模块的方式。通过这个导入语句,你可以使用 Image 模块进行各种图像操作,如打开、操作和保存图像。
from torch.utils.tensorboard import SummaryWriter#torch.utils.tensorboard 模块提供了在 PyTorch 中使用 TensorBoard 的功能。在这个模块中,SummaryWriter 类是用于创建和管理 TensorBoard 日志的关键类。
from torchvision import transforms #torchvision.transforms 模块是 PyTorch 提供的图像预处理工具集,它提供了各种常用的图像预处理操作和转换器。通过导入 transforms 模块,你可以使用其中的转换器来对图像进行常见的预处理操作,如缩放、裁剪、旋转、翻转、标准化等。writer = SummaryWriter("logs") #SummaryWriter("logs") 是一个用于创建 TensorBoard 的 SummaryWriter 对象的函数。它接受一个可选的参数,表示 TensorBoard 日志文件的保存路径。
img = Image.open(r"练手数据集\val\bees\6a00d8341c630a53ef00e553d0beb18834-800wi.jpg")#代码中的 Image.open 是 PIL 库中的一个函数,用于打开图像文件。它接受一个参数,表示要打开的图像文件路径。
print(img)# ToTensor ToTensor 是一个常用的数据转换操作,用于将 PIL 图像或 NumPy 数组转换为 PyTorch 的张量(tensor)。
trans_totensor = transforms.ToTensor()# 定义 ToTensor 转换
img_tensor = trans_totensor(img)# 将图像转换为张量
writer.add_image("ToTensor", img_tensor)#writer.add_image 是一个用于将图像添加到 TensorBoard 可视化的函数。通过传递一个图像张量给这个函数,你可以在 TensorBoard 中观察、比较和分析图像数据。# Normalize Normalize 是一个常用的数据转换操作,用于将张量中的数值进行标准化。标准化可以使数据在一定范围内进行缩放,并且具有零均值和单位方差。
print(img_tensor[0][0][0])#显示标准化后的图像张量中的某个像素的值
trans_norm = transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5])#创建了一个 Normalize 类型的转换器 trans_norm。这个转换器可以将图像张量进行标准化,使其均值为 0.5,标准差为 0.5。 # 定义标准化转换
img_norm = trans_norm(img_tensor)# 进行标准化
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)# Resize 是一个常用的图像预处理操作,它用于调整图像的尺寸。通过 Resize 操作,你可以将图像调整为特定的宽度和高度,或者按比例缩放。
print(img.size)
trans_resize = transforms.Resize((512,512)) #通过 transforms.Resize() 创建了一个名为 trans_resize 的转换器,将图像的尺寸调整为 (512, 512)。
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img) # 将转换器应用到图像上
# img_resize PIL -> totensor -> img_resize totensor
img_resize = trans_totensor(img_resize)#将经过 transforms.Resize() 转换器调整大小后的图像 img_resize 转换为张量。
writer.add_image("Resize",img_resize,0)print(img_resize)# compose - resize - 2 #transforms.Compose 是 torchvision.transforms 模块中的一个函数,用于将多个图像预处理操作串联在一起形成一个组合转换器。
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])#是一个 PyTorch 中的图像转换函数,用于将多个图像转换操作组合在一起,以便同时应用于图像数据
img_resize_2 = trans_compose(img)
writer.add_image("Resize",img_resize_2,1)# RandomCrop transforms.RandomCrop 是 torchvision.transforms 模块中的一个转换器,用于随机裁剪图像。
trans_random = transforms.RandomCrop(512)# 定义随机裁剪转换器
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])#创建一个组合转换器 trans_compose_2,其中包含两个转换器 trans_random 和 trans_totensor。
for i in range(10):img_crop = trans_compose_2(img)## 应用组合转换器writer.add_image("RandomCrop", img_crop,i)writer.close()
torchvision数据集的使用
import torchvision
from torch.utils.tensorboard import SummaryWriterdataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()
])train_set = torchvision.datasets.CIFAR10(root="./dataset",train=True,transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset",train=False,transform=dataset_transform, download=True)# print(test_set[0])
# print(test_set.classes)
#
# img,target = test_set[0]
# print(img)
# print(target)
# print(test_set.classes[target])
# img.show()
# print(test_set[0])writer = SummaryWriter("p10")
for i in range(10):img, target = test_set[i]writer.add_image("test_set", img, i)writer.close()
dataloader的使用
import torchvision#准备测试数据集
from torch.utils.data import DataLoader#通过使用DataLoader,您可以自动将数据集分成小的批次,这对于训练深度学习模型非常重要。DataLoader还提供了多线程数据加载和预取功能,以提高数据加载的效率。
from torch.utils.tensorboard import SummaryWritertest_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())#这行代码使用torchvision.datasets.CIFAR10函数创建了一个test_data对象,表示CIFAR-10数据集的测试集。该数据集包含图像和相应的标签,用于评估模型的性能。
# 代码中的参数如下所示:
# "./dataset":指定数据集文件存储的路径。可以根据自己的需要进行更改。
# train=False:表示加载的是测试集,而不是训练集。
# transform=torchvision.transforms.ToTensor():指定了数据集的转换操作,将图像转换为Tensor类型。test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)#这行代码创建了一个名为test_loader的数据加载器,用于加载测试数据集。
# 参数解释如下:
# dataset=test_data:指定要加载的数据集对象,这里是test_data,即CIFAR-10的测试集数据。
# batch_size=64:指定每个批次的大小为64,即每次加载64个样本。
# shuffle=True:表示在每个epoch开始时是否打乱数据集的顺序。这里将数据打乱以增加随机性。
# num_workers=0:指定用于数据加载的子进程数量。默认为0,表示只使用主进程进行数据加载。
# drop_last=False:指定是否丢弃最后一个不完整的批次。这里设置为False,表示即使最后一个批次样本数量不足64个,也要加载。# 测试数据集中第一张图片及target
img, target = test_data[0]#返回的img变量将包含图像数据,而target变量将包含该图像对应的标签。
print(img.shape)
print(target)#遍历test_loader数据加载器中的所有批次,并将批次中的图像数据添加到SummaryWriter对象中,以便在TensorBoard中可视化。# 在每个epoch中的每个批次中,它执行以下操作:
#
# 从test_loader加载器中获取一个批次的数据,包括图像和相应的标签,通过for data in test_loader: img, targets = data这行代码实现。
#
# 利用writer.add_images方法,将当前批次的图像添加到TensorBoard中。这行代码使用了"Epoch:{}"作为标题,其中的epoch变量表示当前的epoch数。img是当前批次的图像数据,step用于标识每个批次的索引。
#
# 更新step的值,以进行下一个批次的计数。
writer = SummaryWriter("dataloader")
for epoch in range(2):step = 0for data in test_loader:img,targets = data# print(img.shape)# print(targets)writer.add_images("Epoch:{}".format(epoch),img,step)step = step +1writer.close()
相关文章:
pytorch入门-TensorBoard和Transforms
TensorBoard from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transforms# python的用法 -》 tensor数据类型 # 通过transforms.ToTensor 去解决两个问题 # 1. transforms该如何使用(python) # 2. …...
【java】Java基础——接口和实现
当一个类实现一个接口时,必须提供接口中定义的所有方法的具体实现,除非这个类是抽象类。默认方法:default修饰接口中的方法,可实现方法体,在实现接口的类中可以不重写该方法 // 定义一个接口,接口不关心方…...
JetPack Compose 学习笔记(持续整理中...)
1.为什么要学? 1.命令式和声明式 UI大战,个人认为命令式UI自定义程度较高,能更深入到性能,内存优化方面,而申明式UI 是现在主流的设计,比如React,React Native,Flutter,Swift UI等等,现在性能也逐渐在变得更好 2.还有一个原因compose 是KMM 是完整跨平台的UI基础 3.…...
遍历集合List的五种方法以及如何在遍历集合过程中安全移除元素
一、遍历集合List的五种方法 测试数据 List<String> list new ArrayList<>(); list.add("A");list.add("B");list.add("C");1. 普通for循环 普通for循环,通过索引遍历 for (int i 0; i < list.size(); i) {Syst…...
【SQL应知应会】索引(二)• MySQL版
欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 索引 • MySQL版 前言一、索引1.简介2.创建2.1 索引…...
Android 简单的视频、图片压缩工具
首页需要压缩的工具包 1.Gradle implementation com.iceteck.silicompressorr:silicompressor:2.2.3 2.添加相关权限(手机得动态申请权限) <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/> <uses-p…...
信息论、推理和机器学习算法之间交叉的经典例子
信息论、推理和机器学习算法之间交叉的经典例子: 熵和信息增益在决策树学习中的应用。信息增益利用熵的概念来评估特征的分类能力,从而指导决策树的增长。 交叉熵在神经网络训练中的广泛使用。它结合信息论与最大似然推断,用于度量预测分布与真实分布之间的距离。 变分推断常被…...
【多线程】网络原理初识
网络原理初识 1. 网络发展史1.2 独立模式1.3 网络互联1.3 局域网1.4 广域网 2. 网络通信基础2.1 IP地址2.2 端口号2.3 认识协议2.4 五元组2.5 协议分层2.5.1 什么是协议分层2.5.2 协议分层的好处2.5.2 OSI七层模型2.5.3 TCP/IP五层模型 2.6 封装和分用2.6.1 封装2.6.1.1 应用层…...
Android之ADB常用命令
15、查看ipv6 是否使能 sysctl -a | grep ipv6 | grep disable 13、以太网获取Ip、网关、子网掩码、域名等 adb shell 网卡信息:ifconfig eth0 dns1:getprop net.dns1 dns2:getprop net.dns2 12、屏幕分辨率:wm size 11、…...
低代码开发工具:JVS轻应用之间如何实现数据的调用?
在低代码开发平台中,如何实现应用之间的数据共享呢?最标准的方式是通过接口,本文介绍JVS轻应用如何实现将数据通过API输出、轻应用如何实现体内API数据的获取?实现方式如下图所示,不管是数据提供方,还是数据…...
在Java中对XML的简单应用
XML 数据传输格式1 XML 概述1.1 什么是 XML1.2 XML 与 HTML 的主要差异1.3 XML 不是对 HTML 的替代 2 XML 语法2.1 基本语法2.2 快速入门2.3 组成部分2.3.1 文档声明格式属性 2.3.2 指令(了解):结合CSS2.3.3 元素2.3.4 属性**XML 元素 vs. 属…...
Linu学习笔记——常用命令
Linux 常用命令全拼: Linux 常用命令全拼 | 菜鸟教程 一、切换root用户 1.给root用户设置密码 sudo passwd root 2.输入密码,并确认密码 3.切换到root用户 su:Swith user(切换用户) su root 二、切换目录 目录结构:Linux 系…...
PLUS操作流程、应用与实践,多源不同分辨率数据的处理、ArcGIS的应用、PLUS模型的应用、InVEST模型的应用
PLUS模型是由中国地质大学(武汉)地理与信息工程学院高性能空间计算智能实验室开发,是一个基于栅格数据的可用于斑块尺度土地利用/土地覆盖(LULC)变化模拟的元胞自动机(CA)模型。PLUS模型集成了基于土地扩张分析的规则挖掘方法和基于多类型随机…...
item_review-获得淘宝商品评论
一、接口参数说明: item_review-获得淘宝商品评论,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_review 名称类型必须描述keyString是调用key(点击获…...
如何读取文件夹内的诸多文件,并选择性的保留部分文件
目录 问题描述: 问题解决: 问题描述: 当前有一个二级文件夹,第一层是文件夹名称是“Papers(LNAI14302-14304)",第二级文件夹目录名称如下图蓝色部分所示。第三层为存放的文件,如下下图所示,每一个文件中,均存放三个文件,分别为copyright.pdf, submission.pdf, s…...
每天一道leetcode:1129. 颜色交替的最短路径(图论中等广度优先遍历)
今日份题目: 给定一个整数 n,即有向图中的节点数,其中节点标记为 0 到 n - 1。图中的每条边为红色或者蓝色,并且可能存在自环或平行边。 给定两个数组 redEdges 和 blueEdges,其中: redEdges[i] [ai, bi…...
原生js发送ajax请求---ajax请求篇(一)
在原生js中我们使用的是XMLHttpRequest对象来发送ajax请求 主要步骤就是: 1.创建XMLHTTPRequest对象 2.使用open方法设置和服务器的交互信息 3.设置发送的数据,开始和服务器端交互 4.注册事件 5.更新界面 (1) get方式 //步骤一…...
【ARM 嵌入式 编译系列 2.1 -- GCC 编译参数学习】
文章目录 1.1 GCC 编译参数1.1.1 GCC arm-noe-eabi- 介绍1.1.1.1 ARM 和 Thumb 指令集区别1.1.2 GCC CFLAGS 介绍1.1.3 GCC LDFLAGS 介绍1.1.4 CXXFLAGS 介绍上篇文章:ARM 嵌入式 编译系列 2 – GCC 编译过程介绍 下篇文章:ARM 嵌入式 C 入门及渐进 3 – GCC attribute((weak…...
C++教程 - How to C++系列专栏第3篇
关于专栏 这个专栏是优质的C教程专栏,如果你还没看过第0篇,点击C教程 - How to C系列专栏第0篇去第0篇 本专栏一致使用操作系统:macOS Ventura,代码编辑器:CLion,C编译器:Clang 感谢一路相伴…...
使用Edge和chrom扩展工具(GoFullPage)实现整页面截图或生成PDF文件
插件GoFullPage下载:点击免费下载 如果在浏览网页时,有需要整个页面截图或导出PDF文件的需求,这里分享一个Edge浏览器的扩展插件:GoFullPage。 这个工具可以一键实现页面从上到下滚动并截取。 一、打开“管理扩展”(…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
