Pytorch学习 day04(Totensor、Normalize、Resize、Compose)

Totensor

  • 把一个PIL格式的图片,或者ndarray格式的图片转换为tensor格式
  • 使用方法,如下:
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter

img = Image.open("images/0013035.jpg")  #打开一张图片
print(img)

writer = SummaryWriter("logs")  #创建一个writer对象

trans_tensor = transforms.ToTensor()    #创建一个ToTensor对象
img_tensor = trans_tensor(img)  #使用__call__方法,将PIL 转换为tensor
writer.add_image("Totensor", img_tensor)    #将tensor添加到writer对象中,就可以用tensorboard展示图象

writer.close()

在这里插入图片描述

Normalize

  • 根据它的平均值和标准差来标准化一个tensor格式的图片,由于通常是RGB图片,所以信道数为3,传入三个平均值和标准差即可
  • 传入的平均值和标准差需要是以序列的格式
  • 计算公式如下:
    在这里插入图片描述
  • 代码如下:
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter

img = Image.open("images/0013035.jpg")  #打开一张图片
print(img)

writer = SummaryWriter("logs")  #创建一个writer对象

# Totensor
trans_tensor = transforms.ToTensor()    #创建一个ToTensor对象
img_tensor = trans_tensor(img)  #使用__call__方法,将PIL 转换为tensor
writer.add_image("Totensor", img_tensor)    #将tensor添加到writer对象中,就可以用tensorboard展示图象

# Normalize
trans_normal = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  #创建一个Normalize对象
img_normal = trans_normal.forward(img_tensor)  #使用forward方法,将tensor进行标准化
writer.add_image("Normalize", img_normal)  #将标准化的tensor添加到writer
writer.close()
  • 结果如下:
    在这里插入图片描述

Resize

  • 将PIL或Tensor格式的输入图片,调整为指定的尺寸,并使用forward()函数返回对应格式的图片,如下:
  • 传入的尺寸需要是以序列的格式
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter

img = Image.open("images/0013035.jpg")  #打开一张图片
print(img)

writer = SummaryWriter("logs")  #创建一个writer对象

# Totensor
trans_tensor = transforms.ToTensor()    #创建一个ToTensor对象
img_tensor = trans_tensor(img)  #使用__call__方法,将PIL 转换为tensor

# Resize
print(img.size)  #打印原图的尺寸
trans_resize = transforms.Resize((100, 100))
# img PIL -> Resize -> img_resize PIL
img_resize = trans_resize.forward(img)  #使用forward方法,将图像进行缩放
print(img_resize.size)   #打印PIL格式缩放后的尺寸
# img_resize PIL -> ToTensor -> img_resize tensor
img_resize = trans_tensor(img_resize)   #将PIL转换为tensor
print(img_resize.size())   #打印tensor格式缩放后的尺寸
writer.add_image("Resize", img_resize)   #将缩放后的tensor添加到writer
writer.close()
  • 结果如下:
    在这里插入图片描述

Compose

  • 将多个transforms工具组合在一起,方便使用,相当于循环调用多个transforms工具,并把上一个输出传给下一个,当作输入
  • 注意传入列表的第一个工具的输出格式要满足第二个的输入格式
  • 代码如下:
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter

img = Image.open("images/0013035.jpg")  #打开一张图片
print(img)

writer = SummaryWriter("logs")  #创建一个writer对象

# Totensor
trans_tensor = transforms.ToTensor()    #创建一个ToTensor对象
img_tensor = trans_tensor(img)  #使用__call__方法,将PIL 转换为tensor
writer.add_image("Totensor", img_tensor)    #将tensor添加到writer对象中,就可以用tensorboard展示图象

# Compose
trans_resize_2 = transforms.Resize(800)
# PIL -> PIL -> Tensor
trans_compose = transforms.Compose((trans_resize_2, trans_tensor))  
img_compose = trans_compose(img)    #使用__call__方法,通过compose结合两个转换方法,将PIL转换为tensor
writer.add_image("Compose", img_compose)
  • 注意:虽然Resize类中没有定义 _ _ call _ 方法,但是Resize继承自Module类,而Module类定义了 _ call _ 方法,因此当我们将resize对象作为一个函数调用时,python会在本身及其父类中寻找 _ call _ 方法, 因此这里可以正常调用,同时Module类的 _ call _ _方法和Raize类的forward()方法的基本实现如下:
class Module:
    def __call__(self, *inputs, **kwargs):
        # 在调用模型实例时,会调用forward方法
        return self.forward(*inputs, **kwargs)

    def forward(self, *inputs, **kwargs):
        # 在子类中实现具体的前向传播逻辑
        raise NotImplementedError
 
class Rasize:
    def forward(self, img):
        """
        Args:
            img (PIL Image or Tensor): Image to be scaled.

        Returns:
            PIL Image or Tensor: Rescaled image.
        """
        return F.resize(img, self.size, self.interpolation, self.max_size, self.antialias)
  • 因此当我们将resize对象作为一个函数调用时,实际上调用的是它的forward方法。
  • 结果如下:
    在这里插入图片描述

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

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

相关文章

Redis 面试题

Redis 基础 什么是 Redis? Redis (Remote Dictionary Server) 本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯…

【二】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

教学管理系统201703153 教学管理系统数据库展示 成绩表展示 课程表展示 学生表展示 院系表展示 一、基本操作 设置复合主键 设置其他表的主键 设置字段取值范围 二、简单操作 第一题 第二题 第三题 第四题 结尾 最后,感谢您阅读我的文章,希望这些内容能…

RF接口测试(1)

RF是做接口测试的一个非常方便的工具,我们只需要写好发送报文的脚本,就可以灵活的对接口进行测试。 做接口测试我们需要做如下工作: 1、拼接发送的报文 2、发送请求的方法 3、对结果进行判断 我们先按步骤实现,再进行RF操作的…

降低85%的gc发生率:ES的GC调优实践!

#大数据/ES #经验 #性能 问题背景 客户方面反馈的问题是ES入库速度变慢,延迟升高到几百毫秒,导致数据积压过多,影响了业务。 排查发现ES的服务日志出现不少的gc overhead现象,下面是一个示例的日志片段: [yyyy-MM-…

C++单例模式、工厂模式

一、单例模式 (一) 什么是单例模式 1. 是什么? 在系统的整个生命周期内,一个类只允许存在一个实例。 2. 为什么? 两个原因: 节省资源。方便控制,在操作公共资源的场景时,避免了多个对象引起的复杂操作…

腾讯云4核8G服务器轻量和CVM可用来干什么?

腾讯云4核8G服务器适合做什么?搭建网站博客、企业官网、小程序、小游戏后端服务器、电商应用、云盘和图床等均可以,腾讯云4核8G服务器可以选择轻量应用服务器4核8G12M或云服务器CVM,轻量服务器和标准型CVM服务器性能是差不多的,轻…

android基础学习

从上面的描述就可以知道,每一个Activity组件都有一个对应的ViewRoot对象、View对象以及WindowManager.LayoutParams对象。这三个对象的对应关系是由WindowManagerImpl类来维护的。具体来说,就是由WindowManagerImpl类的成员变量mRoots、mViews和mParams所…

Linux环境下使用轮询方式操作UART

目录 概述 1 Linux环境下UART设备 2 轮询方式操作UART功能实现 2.1 打开串口函数:usr_serial_open 2.2 关闭串口函数: usr_serial_close 2.3 发送数据函数: usr_serial_sendbytes 2.4 接收数据函数: usr_serial_readbytes …

【QT C++实践】Qt 项目中一个界面动态处理多张数据库中的表|附源码

一、前言 在之前那篇讲如何使用QT连接数据库时(QT C实践|超详细数据库的连接和增删改查操作|附源码),做了一个简单的对数据库进行增删改查的界面(如下)。 但是存在一个问题就是:这个界面只是对一张表进行操作,但是我…

探索HTTP/2

文章目录 http/1.1http/2疑惑 探索1. 连接前言2. 帧结构2.1 帧类型 Type 3. 帧详情3.1 SETTINGS 帧3.2 WINDOW_UPDATE 帧3.3 PRIORITY 帧3.4 HEADERS 帧3.5 DATA 帧3.6 PING3.7 GOAWAY 帧3.8 RST_STREAM 帧3.9 PUSH_PROMISE 帧3.10 CONTINUATION 帧 你对http2了解多少&#xff…

BUUCTF--极客大挑战php

文章目录 1.网站备份文件www.zip2.下载后发现class.phpindex.phpflag.php 3.分析php代码绕过__wakeup方法变量权限为私有或保护python方法url方法 1.网站备份文件www.zip 2.下载后发现 class.php <?php include flag.php; error_reporting(0);class Name{private $usernam…

MYSQL5.7报1205 - Lock wait timeout exceeded; try restarting transaction

简介 今天使用navicate操作添加时&#xff0c;mysql报错误&#xff0c;错误如下 原因 这个问题的原因是在mysql中产生了事务A&#xff0c;执行了修改的语句&#xff0c;比如&#xff1a; update t1 set aget18 where id1;此时事务并未进行提交&#xff0c;事务B开始运行&am…

【C++精简版回顾】19.异常处理

1.throw抛出问题 int print(int a,int b) {if (b 0)throw b;return a / b; } 2.try与catch解决问题 try {print(2, 0); } catch (int b) {cout << "竟然是&#xff1a;"<<b<<endl; } 结果&#xff1a; 补充1&#xff1a;可以抛出字符串等 1.throw…

pytorch配置环境

1.查看cuda版本 nvidia-smi cuda version:12.3 2.下载torch 然后根据版本去查找对应的 torch下载代码 可查看这里&#xff1a;Previous PyTorch Versions | PyTorch 然后执行 conda install pytorch1.10.0 torchvision0.11.0 torchaudio0.10.0 cudatoolkit11.3 -c pytorch…

Python的文件操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 路在脚下&#xff0c;勇往直前&#x…

使用nvidia-ml-py事实监控GPU状态

平时监控GPU状态最常用的是watch配合nvidia-smi指令&#xff0c;但有时可能不仅仅需要监控&#xff0c;还需要记录状态数据&#xff0c;比如GPU的显存变化以及利用率变化等等。本文提供了一个使用nvidia-ml-py包编写的简易Demo&#xff0c;该Demo能够实现简易版的nvidia-smi功能…

[云原生] K8s之pod控制器详解

Pod 是 Kubernetes 集群中能够被创建和管理的最小部署单元。所以需要有工具去操作和管理它们的生命周期,这里就需要用到控制器了。 Pod 控制器由 master 的 kube-controller-manager 组件提供&#xff0c;常见的此类控制器有 Replication Controller、ReplicaSet、Deployment、…

openssl3.2 - exp - 产生随机数

文章目录 openssl3.2 - exp - 产生随机数概述笔记END openssl3.2 - exp - 产生随机数 概述 要用到openssl产生的随机数, 查了资料. 如果用命令行产生随机数, 如下: openssl rand -hex -num 6 48bfd3a64f54单步跟进去, 看到主要就是调用了一个RAND_bytes(), 没其他了. 官方说…

美国站群服务器使用技巧与注意事项

美国站群服务器使用技巧与注意事项有哪些?RAKsmart小编为您整理发布美国站群服务器使用技巧与注意事项&#xff0c;希望对您有帮助。 美国站群服务器的使用技巧主要包括远程管理、灵活配置和备份还原&#xff0c;具体如下&#xff1a; 1. **远程管理**&#xff1a;用户可以通过…

Promisification、微任务

前提摘要 Promise 对象的构造器&#xff08;constructor&#xff09;语法如下&#xff1a; let promise new Promise(function(resolve, reject) { // executor }); 传递给 new Promise的函数被称为 executor&#xff0c;当 new Promise 被创建&#xff0c;executor 会自动…