PyTorch深度学习入门-1

PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili

\

  PyTorch 和 TensorFlow 是两个深度学习框架,TensorBoard 是 TensorFlow 提供的可视化工具,Transforms是 PyTorch 中用于数据预处理的工具,而神经网络则是深度学习模型的基础。在深度学习项目中,通常会同时使用这些工具和概念,以构建、训练和评估神经网络模型。

一、TensorBoard 的使用

Add_image()的使用(常用来观察训练结果)

tag (str): Data identifier: 这个参数是一个字符串类型,用于标识数据的身份或者标签。

img_tensor (torch.Tensor, numpy.ndarray, or string/blobname): 这个参数可以接受多种类型的输入,包括 torch.Tensor、numpy.ndarray、字符串或者 blob 名称。通常用于传入图像数据。

global_step (int): Global step value to record: 这个参数是一个整数类型,用于记录全局步骤值,可以用来跟踪训练的进度或者迭代次数


1.

Image 也未定义。这表明你可能没有正确导入包含 Image 类的模块。通常情况下,Image 类是从 Python 的 PIL 库(Pillow 库的一部分)中导入的。


2.利用Opencv读取图片,获得numpy型图片

import numpy as np 是 Python 中用于导入 numpy 模块并给模块起一个别名的语句。

具体来说,import numpy 表示导入 numpy 模块,numpy 是一个用于科学计算的常用库,提供了许多用于数组操作和数学运算的功能。

而 as np 则是为导入的 numpy 模块指定了一个别名 np,可以使用 np 来代替 numpy 来访问 numpy 模块中的函数和类。


3.

PIL 是一个库,它是 Python Imaging Library 的缩写,用于处理图像数据。在这里我们使用 from PIL import Image 导入了 PIL 库中的 Image 类

  1. tag:用于标识图像的标签或名称。
  2. img_tensor:包含图像数据的张量。通常是一个四维张量,形状为 [batch_size, channels, height, width],其中 batch_size 表示批量大小,channels 表示通道数,height 表示图像高度,width 表示图像宽度。
  3. global_step(可选):用于指定图像的全局步数或时间戳,以便与其他数据对齐。例如,在训练神经网络时,可以将当前的训练步数作为 global_step
  4. walltime(可选):用于指定图像的时间戳,通常用于在 TensorBoard 中按时间查看数据。如果未提供,则会使用当前时间。
  5. dataformats(可选):指定图像数据的格式。常见的格式包括 "CHW"(通道-高度-宽度)和 "HWC"(高度-宽度-通道),默认为 "CHW"。

from PIL import Image
import numpy as np
from Transforms_ import writer
img_PIL = Image.open("val/ants/183260961_64ab754c97.jpg")
img_array = np.array(img_PIL)
writer.add_image("test" , img_array , 1,dataformats='HWC')
writer.close()

第二张图片:

想让第二张图片单独输出,:

  1. 删除日志中的第一张图片相关信息: 在写入第二张图片之前,关闭写入器(writer),然后重新创建一个新的写入器,并且不要添加第一张图片的信息。这样第二张图片就会成为新日志中的唯一图片。

    from PIL import Image
    import numpy as np
    from Transforms_ import writer
    
    # 写入第一张图片的代码
    img_PIL = Image.open("val/ants/183260961_64ab754c97.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test" , img_array , 1,dataformats='HWC')
    
    # 关闭写入器
    writer.close()
    
    # 创建新的写入器,并写入第二张图片的代码
    writer = SummaryWriter()  # 这里根据你的实际情况创建 SummaryWriter
    img_PIL = Image.open("val/bees/59798110_2b6a3c8031.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test" , img_array , 2,dataformats='HWC')
    
    # 关闭写入器
    writer.close()
    

    2.另一种方法是给第一张图片的标签(tag)添加一个唯一的标识,例如,在第一张图片的标签中加上后缀 "_1",而第二张图片的标签中加上后缀 "_2"。这样就可以保留两张图片的信息,但它们会有不同的标签,从而单独输出

    from PIL import Image
    import numpy as np
    from Transforms_ import writer
    
    # 写入第一张图片的代码
    img_PIL = Image.open("val/ants/183260961_64ab754c97.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test_1" , img_array , 1,dataformats='HWC')
    
    # 写入第二张图片的代码
    img_PIL = Image.open("val/bees/59798110_2b6a3c8031.jpg")
    img_array = np.array(img_PIL)
    writer.add_image("test_2" , img_array , 2,dataformats='HWC')
    
    # 关闭写入器
    writer.close()
    

    二、Transforms的使用

使用方法:

1.多查看官网文档

2.关注输入输出参数

3.返回值未知时:

4.打断点,调试

1.ToTensor

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
img_path = "val/ants/8124241_36b290d372.jpg"
#ToTensor
img = Image.open(img_path)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img)
writer = SummaryWriter("logs")
writer.add_image("tensor_img",tensor_img)
writer.close()

2.Normalize

#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)

3.Resize

  接受一个参数 size,它可以是一个序列(sequence)或者一个整数(int)。参数 size 表示期望的输出尺寸。如果 size 是一个类似于 (h, w) 的序列,那么输出的尺寸将会被调整成与这个序列相匹配的大小。如果 size 是一个整数,那么图像的较小边将会被调整到这个数字所代表的大小。举个例子,如果图像的高度大于宽度,那么图像将会被调整成 (size * height / width, size) 的大小。

想要在Transform进行显示,需要修改为to_tensor 类型

#Resize
trans_resize = transforms.Resize((512, 512))
#img PIL ->resize ->img_resize PIL
img_resize = trans_resize(img)
#img_resize PIL -> totensor ->img_resize tensor
img_resize = tensor_trans(img_resize)
print(img_resize)
writer.add_image("Resize",img_resize)
writer.close()

4.Compose

5.RandomCrop

#RandomCrop 随机裁剪
#要注意裁剪尺寸不要超过实际尺寸
trans_random=transforms.RandomCrop((500,300))
trans_compose_2=transforms.Compose([trans_random,tensor_trans])
for i in range(10):
    img_crop=trans_compose_2(img)
    writer.add_image("RandomCropHW",img_crop,i)

writer.close()

三、使用 torchivision 的标准数据集

torchvision — Torchvision 0.17 documentation (pytorch.org)

from torch.utils.tensorboard import SummaryWriter
from PIL import Image
#导入torchvision模块
import torchvision
#导入torchvision中的transforms子模块
from torchvision import transforms
#定义转换器
transform_ = transforms.Compose([
    transforms.ToTensor(),
])
train_set = torchvision.datasets.CIFAR10(root="./dataset",  train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset",  train=True, 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()

注意img.show需要的参数类型为PIL

和transforms一起使用,注意参数的修改,并将PIL类型改成Tensor类型

训练数据集,train参数设置为True,加载测试数据集,就将其设置为False

from torch.utils.tensorboard import SummaryWriter
#导入torchvision模块
import torchvision
#导入torchvision中的transforms子模块
from torchvision import transforms
#定义转换器
transform_ = transforms.Compose([
    transforms.ToTensor(),
])
train_set = torchvision.datasets.CIFAR10(root="./dataset", transform=transform_, train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", transform=transform_, train=False, 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("P14")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set" , img , i)

writer.close()

四、Dataloader的使用

取出数据集dataset的数据

官网查看相关信息:torch.utils.data — PyTorch 1.8.1 documentation

随即抓取:

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# 准备的测试数据集
test_data=torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
test_loader=DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=False)

# 测试数据集中的第一张图片及target
writer = SummaryWriter("dataloader")

# 初始化步数
step = 0

# 遍历测试数据集
for data in test_loader:
    imgs, targets = data
    # 将图像添加到TensorBoard
    writer.add_images("test_data", imgs, step)
    step += 1

# 关闭TensorBoard写入器
writer.close()

最后一张👇

shuffle修改为True时  👉

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

可视化图表:K线图,快速搞清价格波动。

2023-08-21 21:20贝格前端工场 Hi,我是贝格前端工场的老司机,本文分享可视化图表设计的K线图设计,欢迎老铁持续关注我们。 一、K线图的含义 K线图(K Line Chart)是一种常用于股票、期货等金融市场的可视化图表&…

如何将图片识别转文字?这3种工具简单易操作

如何将图片识别转文字?在数字化时代,图片识别转文字技术的需求愈发凸显。无论是处理海量的扫描文档,从中迅速提取关键信息,还是通过照片轻松记录菜单上的文字,这一技术都展现出了其强大的实用性。它极大地提高了我们的…

计算机网络—VLAN 间路由配置

目录 1.拓扑图 2.实验环境准备 3.为 R3 配置 IP 地址 4.创建 VLAN 5.配置 R2 上的子接口实现 VLAN 间路由 6.配置文件 1.拓扑图 2.实验环境准备 配置R1、R3和S1的设备名称,并按照拓扑图配置R1的G0/0/1接口的IP地址。 [Huawei]sysname R1 [R1]interface Giga…

机器视觉/将HIK海康面阵相机连接Halcon软件

文章目录 概述工业相机客户端动态库拷贝Halcon连接HIK相机的配置相机参数其他 概述 本文简述了如何将海康面阵相机连接到Halcon软件中进行实时取图的过程。 补充, 整个实践过程使用 17.12 / x64-win64 Halcon 软件版本 海康 MV-CE200-10GM 面阵相机。从左到右简解…

机器学习周报第35期

目录 一、文献阅读:You Only Look Once: Unified, Real-Time Object Detection1.1 摘要1.2 背景1.3 论文模型1.4 网络设计1.5 YOLO的局限性1.6 实现代码 target 7*7*30 值域为0-1 一、文献阅读:You Only Look Once: Unified, Real-Time Object Detection…

C/C++ 之 GSL 数学运算库使用笔记

Part.I Introduction 本文主要记录一下笔者使用 GSL 过程当中所做的一些笔记。 Chap.I 传送门 一些传送门 GSL源码(CMakeList 版本-Windows)GSL源码(configure 版本-Linux)GSL 在线文档GSL 文档下载 Chap.II GSL 简介 GSL 全…

【Java EE】多线程(一)

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

Python爬虫验证码识别——手机验证码的自动化处理

手机验证码的自动化处理 有一种验证码就是手机验证码,如果在PC上出现了一个手机验证码,需要先在PC上输入手机号,然后把短信验证码发到手机上,再在PC上输入收到的验证码,才能通过验证。 遇到这样的情况,如…

【Linux在程序运行时打印调用栈信息(函数名,文件行号等)】

在程序运行时打印相关调用栈信息&#xff08;函数名&#xff0c;文件行号等&#xff09;,便于梳理调用逻辑等 //stack.c #include <stdio.h> #include <execinfo.h> #include <stdlib.h> #include <string.h> #include <stdbool.h>#define MAX_…

vue cesium heatmap 热力图

实现效果 引入 heatmap index.html 中引入 heatmap <script src"./heatmap.min.js"></script>使用 <script lang"ts" setup> import * as Cesium from cesium import cesium/Build/Cesium/Widgets/widgets.cssdefineOptions({ name: …

MySQL count函数的使用

count&#xff08;&#xff09;函数在使用时参数好像不能设置为表达式&#xff0c;只能设置成指定字段或* 比如在查询性别为男的成员数目时不能写&#xff1a; select count(gendermale) from user_profile ; 否则直接得到6&#xff0c;也就是等价于select count(gender) fro…

Docker镜像的(Dive)分析和(Grype)漏洞扫描

Dive dive能够分析docker镜像分层内容以及发现缩小docker/OCI镜像大小的方法。 提高部署效率&#xff1a;能够秒级快速启动一个应用&#xff0c;而传统的方式分钟级别以上&#xff1b; 提高运行效率&#xff1a;相对物理机和虚拟化&#xff0c;容器具有更高的资源利用率&…

【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)

合并两个有序链表 题目描述思路及实现方式一&#xff1a;迭代&#xff08;推荐&#xff09;思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二&#xff1a;递归&#xff08;不推荐&#xff09;思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标…

LLM大语言模型(八):ChatGLM3-6B使用的tokenizer模型BAAI/bge-large-zh-v1.5

背景 BGE embedding系列模型是由智源研究院研发的中文版文本表示模型。 可将任意文本映射为低维稠密向量&#xff0c;以用于检索、分类、聚类或语义匹配等任务&#xff0c;并可支持为大模型调用外部知识。 BAAI/BGE embedding系列模型 模型列表 ModelLanguageDescriptionq…

《QT实用小工具·五》串口助手

1、概述 源码放在文章末尾 该项目实现了串口助手的功能&#xff0c;可在界面上通过串口配置和网络配置进行串口调试。 基本功能 支持16进制数据发送与接收。支持windows下COM9以上的串口通信。实时显示收发数据字节大小以及串口状态。支持任意qt版本&#xff0c;亲测4.7.0 到…

[leetcode] 100. 相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&a…

微信小程序【从入门到精通】——服务器的数据交互

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【设计】6种ID生成策略描述,优点 ,缺点 ,适用场景

1.数据库自增ID 描述 自增Id是在设计表时将id字段的值设置为自增的形式&#xff0c;这样当插入一行数据时无 需指定id会自动根据前一字段的Id值1进行填充 优点 主键自动增长&#xff0c;不用手工设值、数字型&#xff0c;占用空间小、检索非常有利、有顺序&#xff0c;不会…

08、JS实现:数组两数之和算法的两种解决方案(一步一步剖析,很详细)

数组两数之和的算法 Ⅰ、数组两数之和算法的方案一&#xff1a;1、题目描述&#xff1a;2、解题思路&#xff1a;3、实现代码&#xff1a; Ⅱ、数组两数之和算法的方案二&#xff1a;1、实现代码&#xff1a; Ⅲ、小结&#xff1a; Ⅰ、数组两数之和算法的方案一&#xff1a; …

51单片机学习笔记11 使用DS18B20温度传感器

51单片机学习笔记11 使用DS18B20温度传感器 一、DS18B20简介1. 主要特点2. 工作原理3. 引脚说明4. ROM 二、1-wire协议简介1. 总线结构&#xff1a;2. 通信方式&#xff1a;3. 数据传输&#xff1a;4. 设备识别&#xff1a;5. 供电方式&#xff1a;6. 应用场景&#xff1a;7. 优…