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。 这个工具可以一键实现页面从上到下滚动并截取。 一、打开“管理扩展”(…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...