Pytorch个人学习记录总结 03

目录

Transeforms的使用

常见的transforms


Transeforms的使用

torchvision中的transeforms,主要是对图像进行变换(预处理)。from torchvision import transforms

transeforms中常用的就是以下几种方法:(Alt+7可唤出左侧的Structure结构)
“Compose”, “ToTensor”, “PILToTensor”, “ConvertImageDtype”, “ToPILImage”, “Normalize”, “Resize”, “Scale”,“CenterCrop”

 

Compose: Composes several transforms together. Args:list of transforms to compose.将几个变换组合在一起。参数:[Transform对象列表],例如transforms.Compose([transforms.CenterCrop(10),transforms.ToTensor(),…])


ToTensor: Convert a PIL Image or numpy.ndarray to tensor.


ToPILImage: Convert a tensor or an ndarray to PIL Image.


Normalize(torch.nn.Module): Normalize a tensor image with mean and standard deviation.This transform does not support PIL Image.用平均值和标准偏差归一化张量图像。此转换不支持PIL图像。(为n个维度给定mean:(mean[1],…,mean[n])和std:(std[1],…,std[n]),此转换将对每个channel进行归一化)


Resize(torch.nn.Module): Resize the input image (PIL Image or Tensor) to the given size.Return PIL Image or Tensor: Rescaled image.将输入的图像(PIL Image or Tensor)的大小缩放到指定的size尺寸。size (sequence or int),当是sequence时则调整到指定的(h, w);当是int时,就将原图的min(h,w)调整到size大小,然后另一条边进行等比例缩放。


RandomCrop(torch.nn.Module): Crop the given image (PIL Image or Tensor) at a random location.在随机位置裁剪给定的size大小的图像(size的输入要求跟Resize一样)。

用ToTensor()将PIL Image转为tensor

也可以用 ToTensor() 将 numpy.ndarray 转为tensor(用opencv读入的数据类型是numpy.ndarray)

import numpy as np
from torchvision import transforms
from PIL import Imageimage_path = 'hymenoptera_data/train/ants/0013035.jpg'
image = Image.open(image_path)# 1.transforms该如何使用(python)
tensor_trans = transforms.ToTensor()	# ToTensor()中不带参数
tensor_img = tensor_trans(image)		# 不能直接写成transforms.ToTensor(image)print(np.array(image).shape)	# (512, 768, 3)
print(tensor_img.shape)			# torch.Size([3, 512, 768]),通道数变到第0维了

ToTensor与Tensorboard配合使用

import numpy as np
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Imageimage_path = 'hymenoptera_data/train/ants/0013035.jpg'
image = Image.open(image_path)# 1.transforms该如何使用(python)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(image)print(np.array(image).shape)
print(tensor_img.shape)# 写入tensorboard
writer = SummaryWriter('logs')
writer.add_image('tag', tensor_img, 1)
writer.close()

常见的transforms

图像的数据类型在不同场景往往不同,很容易出错,需要转换为特定格式才能使用!

  • __call__()方法的作用:把一个类的实例化对象变成了可调用对象。调用该实例对象就是执行__call__()方法中的代码。
  • 可以通过内置函数callable来判断是否是可调用对象。例如判断p是否为可调用对象:print(callable(p))返回 True 或 False。
    class Person:def __call__(self, name):print('__call__' + ' Hello ' + name)def hello(self, name):print('hello ' + name)person = Person()               # 实例化一个对象person
    person('zhangsan')              # 像调用函数一样调用person对象
    person.__call__('zhangshan_2')  # 也可像调用类函数调用
    person.hello('wangwu')          # 调用类函数person# __call__ Hello zhangsan
    # __call__ Hello zhangshan_2
    # hello wangwu
    
    from torch.utils.tensorboard import SummaryWriter
    from torchvision import transforms
    from PIL import Imageimage_path = 'hymenoptera_data/train/ants/0013035.jpg'
    image = Image.open(image_path)writer = SummaryWriter('logs')# 1.Totensor
    trans_totensor = transforms.ToTensor()
    img_tensor = trans_totensor(image)
    writer.add_image('ToTensor', img_tensor)  # 这里只传入了tag和image_tensor,没有写入第3个参数global_step,则会默认是第0步# 2.Normalize 可以改变色调
    trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    img_norm = trans_norm(img_tensor)
    writer.add_image('Normalize', img_norm)trans_norm = transforms.Normalize([1, 3, 5], [3, 2, 1])
    img_norm_2 = trans_norm(img_tensor)
    writer.add_image('Normalize', img_norm_2, 1)trans_norm = transforms.Normalize([2, 0.5, 3], [5, 2.6, 1.5])
    img_norm_3 = trans_norm(img_tensor)
    writer.add_image('Normalize', img_norm_3, 2)# 3.Resize 将PIL或者tensor缩放为指定大小然后输出PIL或者tensor
    w, h = image.size   # PIL.Image的size先表示的宽再表示的高trans_resize = transforms.Resize(min(w, h) // 2)    # 缩放为原来的1/2
    img_resize = trans_resize(image)  # 对PIL进行缩放
    writer.add_image('Resize', trans_totensor(img_resize))  # 因为在tensorboard中显示,所以需要转换为tensor或numpy类型trans_resize = transforms.Resize(min(w, h) // 4)    # 缩放为原来的1/4
    img_resize_tensor = trans_resize(img_tensor)
    writer.add_image('Resize', img_resize_tensor, 1)# 4.compose 组合这些操作
    trans_compose = transforms.Compose([transforms.Resize(min(w, h) // 2), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])
    img_campose = trans_compose(image)  # image是PIL.Image格式
    writer.add_image('Compose', img_campose)# 5.Randomcrop 随机裁剪
    trans_randomcrop = transforms.RandomCrop(min(w, h) // 4)    # 从原图中任意位置裁剪1/4
    # img_ranomcrop = trans_randomcrop(img_tensor)
    for i in range(10):img_ranomcrop = trans_randomcrop(img_tensor)writer.add_image('RandomCrop', img_ranomcrop, i)# close()一定要记得写啊!
    writer.close()
    

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

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

相关文章

小程序商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

pb:数据类型检查和转换函数

数据类型检查和转换函数 1、Asc() 功 能:得到字符串第一个字符的ASCII码整数值。 语 法:Asc ( string ) 参 数:string:要得到第一个字符ASCII值的字符串。 返回值:Integer。函数执行成功时返回string参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函…

解决 The ‘more_itertools‘ package is required

在使用爬虫获取维基百科数据时看到了一个很好的项目: 博客:https://blog.51cto.com/u_15919249/5962100 项目地址:https://github.com/wjn1996/scrapy_for_zh_wiki 但在使用过程中遇到若干问题,记录一下: The ‘more_…

SpringBoot整合第三方 Druid、MybatisPlus、Mybatis

整合第三方技术 整合JUnit Respostory 注解:数据类 1、导入测试对应的starter 2、测试类使用 SpringBootTest 修饰 3、使用自动装配的形式添加要测试的对象 classes的属性 其实主要找的是SpringBootApplication中的SpringBootConfiguration这个注解。也就是配置…

python中去除字符串中指定的字符

去除字符串中特定字符(但是只能删除头、尾指定字符): a 你好\n我是xx。\n\n\n print(a.strip(\n))# 你好 # 我是xx。 去除中间字符,可使用replace()函数: a 你好\n我是xx。\n\n\n print(a.replace(\n, ))# 你好我…

215.数组中的第K个最大元素-C++

题目来源:力扣 题目描述: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法…

【微信小程序】通过监听 WebSocket 的状态变化来判断Socket是否已经建立连接

在微信小程序中,可以通过监听 WebSocket 的状态变化来判断是否已经建立连接。具体的操作步骤如下: 创建 WebSocket 对象并进行连接: var socket null; function connectWebSocket() {socket wx.connectSocket({url: wss://your-socket-ur…

VScode中python的相对路径与绝对路径 FileNotFoundError: [Errno 2] No such file or directory

VScode中,python里的相对路径是相对于当前工作目录来定位的,而当前的工作目录在VScode中下方的终端窗口会有提示: 说明此时的工作目录并非当前python文件所在的目录,而是C:\Users\xxxxx(你的用户名)。因此,使用VScode…

CSS自学框架之表格和项目列表

表格和项目列表很直观的显示数据,是我们web开发中经常遇到的最简单表现信息形式。具体代码如下: 一、css代码 ul,ol{margin-left: 1.25em;} /* - 表格 */.myth-table{width: 100%;overflow-x: auto;overflow-y: hidden;border-radius: var(--radius);…

【BOOST程序库】正则表达式相关操作

基本概念这里不解释了&#xff0c;代码中详细解释了BOOST程序库中对于正则表达式常用方法的详细用法。 #include <iostream> #include <string>//正则表达式头文件 #include <boost/xpressive/xpressive.hpp>int main() {//声明正则&#xff1a;boost::pres…

IP隧道技术原理

简介 IP隧道技术是一种将一个协议的数据包封装在另一个协议的数据包中进行传输的技术。在网络通信中&#xff0c;不同的网络协议之间可能存在不兼容的情况&#xff0c;这时候就需要使用IP隧道技术来解决这个问题。 原理 IP隧道技术的原理是将一个协议的数据包封装在另一个协议…

TypeScript中Class Interface Type的定义和区别

TypeScript中的Class、Interface和Type是用来定义数据类型的工具。它们的使用情境和作用有些不同。 目录 Class&#xff08;类&#xff09; Interface&#xff08;接口&#xff09; Type&#xff08;类型&#xff09; 总结 Class&#xff08;类&#xff09; 类可以用于创…

【压测指南|压力测试核心性能指标及行业标准】

文章目录 压力测试核心性能指标及行业标准指标1&#xff1a;响应时间指标2&#xff1a;吞吐量&#xff08;TPS)指标3&#xff1a;失败率总结&#xff1a; 压力测试核心性能指标及行业标准 在做压力测试时&#xff0c;新手测试人员常常在看报告时倍感压力&#xff1a;这么多性能…

进入linux系统中修改网段-ip

第一步 &#xff1a;开启虚拟机 cd 到 /etc/sysconfig/network-scripts 目录下&#xff0c;输入命令给ls,展示这个目录下文件和文件夹 第二步&#xff1a;进入到以ifcfg开头的文件 # ifcfg开头的文件&#xff0c;如果有多个网卡&#xff0c;有多个ifcfg-ensxx文件 命令…

【GUI】使用PID控制器进行台式过程控制实验,以保持热敏电阻的温度(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、操作说明 &#x1f4a5;1 概述 本实验是温度控制的反馈控制应用。特别是&#xff0c;本实验讲解&#xff1a; 手动和自动控制的区别 生成动态数据的 步进测试 拟合动态数…

全国大学生数据统计与分析竞赛2021年【本科组】-B题:用户消费行为价值分析

目录 摘 要 1 任务背景与重述 1.1 任务背景 1.2 任务重述 2 任务分析 3 数据假设 4 任务求解 4.1 任务一&#xff1a;数据预处理 4.1.1 数据清洗 4.1.2 数据集成 4.1.3 数据变换 4.2 任务二&#xff1a;对用户城市分布情况与分布情况可视化分析 4.2.1 城市分布情况可视化分析 4…

选择最佳安全文件传输方法的重要性

在数字化时代&#xff0c;文件的传输是商务、教育、科研、医学等领域不可或缺的工作流程。为了保障数据安全&#xff0c;选择最佳安全文件传输方法非常关键。在本文中&#xff0c;我们将探讨选择最佳安全文件传输方法的重要性。 第一、最佳安全文件传输方法可以保证文件内容不被…

C++-----stack和queue

本期我们来学习stack和queue 目录 stack介绍 栈的使用 栈的模拟实现 queue介绍 队列的使用 队列的模拟实现 deque 优先级队列 模拟实现 仿函数 全部代码 stack介绍 1. stack 是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除…

【C++初阶】模板

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C初阶 ⭐代码仓库&#xff1a;C初阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

亚马逊云科技纽约峰会,充分释放数据价值和生成式AI的潜力

生成式AI将深刻改变每个公司的运营方式&#xff0c;标志着人工智能技术发展的新转折点。亚马逊云科技昨日在纽约峰会上宣布&#xff0c;推出七项生成式AI新功能&#xff0c;进一步降低了生成式AI的使用门槛&#xff0c;让无论是业务用户还是开发者都能从中受益。借助这些新功能…