Pytorch下transforms.ToTensor(),transforms.Normalize()详解,及代码实现和复原

这篇具有很好参考价值的文章主要介绍了Pytorch下transforms.ToTensor(),transforms.Normalize()详解,及代码实现和复原。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、在数据处理时,我们要经常用到transforms.ToTensor(),transforms.Normalize()语句,将图像数据转换为tensor并标准化到[-1,1]之间。

其计算过程为:

①将image数据由(H,W,C)变为(C,H,W),并除以255进行归一化到[0,1]区间;

②将numpy.ndarray数据类型转换为Tensor

③根据image=(x-mean)/std进行标准化计算

代码如下:

from torchvision import transforms
import torch
import cv2 as cv
import numpy
import numpy as np
def normalize(image,mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]):
    image=image.transpose(2,0,1)/255 #由(H,W,C)变为(C,H,W),并进行归一化
    image=torch.from_numpy(image)
    mean = torch.as_tensor(mean)
    std = torch.as_tensor(std)
    if mean.ndim == 1:
        mean = mean.view(-1, 1, 1)
    if std.ndim == 1:
        std = std.view(-1, 1, 1)
    image=(image-mean)/std #根据image=(x-mean)/std进行标准化计算
    return image

二、对于经过标准化的数据,或者经过模型输出的数据,如何从标准化变为可查看的原始数据呢?我们对以上过程进行逆化,其代码如下:

def de_normalize(image,mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]):
    mean = torch.as_tensor(mean)
    std = torch.as_tensor(std)
    if mean.ndim == 1:
        mean = mean.view(-1, 1, 1)
    if std.ndim == 1:
        std = std.view(-1, 1, 1)
    image=image*std+mean #由image=(x-mean)/std可知,x=image*std+mean
    image=image.numpy().transpose(1,2,0)  # 从tensor转为numpy,并由(C,H,W)变为(H,W,C)
    image=numpy.around(image * 255)  ##对数据恢复并进行取整
    image=numpy.array(image, dtype=np.uint8)  # 矩阵元素类型由浮点数转为整数
    return image

三、通过OpenCV的方式读取一张图像,查看效果;运行完可以看到,其type及shape是相同,都为<class 'torch.Tensor'>, torch.Size([3, 300, 300]),print其数值也是一样的。

'''读取数据'''
image=cv.imread('dog.jpg')
'''分别利用transfors.normalize和自定义的normalize函数对图像数据进行处理,比较'''
image_transform=transform(image/255)
image_normalize=normalize(image)
print(type(image_normalize),image_transform.shape)
print(type(image_normalize),image_normalize.shape)

四、对标准化后的数据进行还原

'''调用自定义的函数对数据进行还原'''
deal_image=de_normalize(image_normalize)
'''显示最初图像及还原后的图像'''
cv.imshow('src_image',image)
cv.imshow('deal_image',deal_image)
cv.waitKey(5000)
cv.destroyAllWindows()

可以看到,处理前后两张图片一致,还原成功。

transforms.totensor(), transforms.normalize,pytorch,深度学习,python,opencv,人工智能

 文章来源地址https://www.toymoban.com/news/detail-599596.html

到了这里,关于Pytorch下transforms.ToTensor(),transforms.Normalize()详解,及代码实现和复原的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pytorch中ToTensor的作用

    之前过段时间就会忘记ToTensor是否对输入进行了transpose,因此在这里记录一下ToTensor的作用 ToTensor的作用 该数据增强能把输入的数据格式(numpy.ndarray或者PIL Image)转成tensor格式,输入的shape会从[H, W, C]变成]C, H, W],输入的数值范围会从[0, 255]变成[0, 1], 代码示例

    2024年02月16日
    浏览(24)
  • transforms.Normalize()

    1、定义: 数据标准化处理:transforms.Normalize():transforms.Normalize: 数据标准化,即均值为0,标准差为1。 简单来说就是将数据按通道进行计算,将每一个通道的数据 先计算出其方差与均值 ,然后再将其 每一个通道内的每一个数据减去均值,再除以方差,得到归一化后的结

    2024年02月05日
    浏览(25)
  • Transformer模型详解及代码实现

    Transformer 中单词的输入表示 x 由 单词 Embedding 和 位置 Embedding (Positional Encoding)相加得到,通常定义为 TransformerEmbedding 层,其代码实现如下所示: 1.1,单词 Embedding 单词的 Embedding 有很多种方式可以获取,例如可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训

    2023年04月15日
    浏览(22)
  • Transformer详解(附代码实现及翻译任务实现)

    阅读Transformer论文: 阅读原始的Transformer论文:“Attention is All You Need”,由Vaswani等人于2017年提出,是Transformer模型的开创性工作。 注意力机制: Transformer的核心在于自注意力机制。它允许模型在处理每个词时考虑句子中的所有其他词,从而有效捕获长距离依赖关系。这是通

    2024年01月17日
    浏览(27)
  • ilr normalize isometric log-ratio transformation

    visium_heart/st_snRNAseq/05_colocalization/create_niches_ct.R at 5b30c7e497e06688a8448afd8d069d2fa70ebcd2 · saezlab/visium_heart (github.com) 更多内容,关注微信:生信小博士 The ILR (Isometric Log-Ratio) transformation is used in t he analysis of compositional data. Any given observation is a set of positive values summing to unity, such as t

    2024年02月08日
    浏览(28)
  • Vision Transformer(ViT)论文解读与代码实践(Pytorch)

    Vision Transformer(ViT)是一种基于Transformer架构的神经网络模型,用于处理计算机视觉任务。传统的计算机视觉模型如卷积神经网络(CNN)在处理图像任务时取得了很大的成功,但CNN存在一些局限,例如对于长距离依赖的建模能力较弱。ViT通过引入Transformer的注意力机制来解决这

    2024年02月07日
    浏览(29)
  • Transformer的最简洁pytorch实现

    目录 前言 1. 数据预处理 2. 模型参数 3. Positional Encoding 4. Pad Mask 5. Subsequence Mask 6. ScaledDotProductAttention 7. MultiHeadAttention 8. FeedForward Networks 9. Encoder Layer 10. Encoder 11. Decoder Layer 12. Decoder 13. Transformer 14. 训练 15. 测试 附1:对注意力分头的探究 附2:模型中的数据流动  本文是参考

    2024年02月05日
    浏览(31)
  • PyTorch从零开始实现Transformer

    计算公式 代码实现 我们把Transfomer块定义为如下图所示的结构,这个Transformer块在编码器和解码器中都有出现过。 代码实现 编码器结构如下所示,Inputs经过Input Embedding 和Positional Encoding之后,通过多个Transformer块 代码实现 解码器块结构如下图所示 代码实现 解码器块加上wor

    2024年02月16日
    浏览(32)
  • Vision Transformer架构Pytorch逐行实现

    代码来自哔哩哔哩博主deep_thoughts,视频地址,该博主对深度学习框架方面讲的非常详细,推荐大家也去看看原视频,不管是否已经非常熟练,我相信都能有很大收获。 论文An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale,下载地址。开源项目地址 本文不对开源项目

    2024年02月06日
    浏览(35)
  • Transformer模型 | Python实现TransformerCPI模型(pytorch)

    效果一览 文章概述 Python实现TransformerCPI模型(tensorflow) Dependencies: python 3.6 pytorch = 1.2.0 numpy RDkit = 2019.03.3.0 pandas Gensim =3.4.0 程序设计

    2024年02月07日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包