pytorch中tensor的数据类型及相互转化

  • 1. 数据类型:

在torch中CPU和GPU张量分别有8种数据类型, GPU tensor比CPU tensor多了.cuda

张量数据类型
数据类型dtypeCPU tensorGPU tensor
32位浮点型torch.float32 或 torch.floattorch.FloatTensortorch.cuda.FloatTensor
64位浮点型torch.float64 或 torch.doubletorch.DoubleTensortorch.cuda.DoubleTensor
16位浮点型torch.float16 或 torch.halftorch.HalfTensortorch.cuda.HalfTensor
8位无符号整型torch.uint8torch.ByteTensortorch.cuda.ByteTensor
8位有符号整型torch.int8torch.CharTensortorch.cuda.CharTensor
16位有符号整型torch.int16 或 torch.shorttorch.ShortTensortorch.cuda.ShortTensor
32位有符号整型torch.int32 或 torch.inttorch.IntTensortorch.cuda.IntTensor
64位有符号整型torch.int64 或 torch.longtorch.LongTensor

torch.cuda.LongTensor

在torch中默认的数据类型是32位浮点型(torch.FloatTensor), 

在程序中使用torch.tensor()生成一个张量, 然后使用.dtype获取张量的数据类型

实例:

import torch 

a = torch.tensor([1.3,4.6])
print('a.dtype:',a.dtype)

 

  • 2. 数据类型之间的相互转化:

方法1:

使用a.int(), a.long(), a.short(), a.float(), a.double(), a.half(), a.char(), a.byte() 进行转化

import torch 

a = torch.tensor([1.3,4.6])
b = a.byte()
print('b:',b)

方法2:

使用torch.type()函数, 直接输入需要转化成的类型

import torch 

a = torch.tensor([1.3,4.6])
b = a.type(torch.short)
print('b:',b)

方法3:

使用type_as() 函数,  该函数的作用是将该tensor的类型转化成另一个tensor的类型

import torch 

a = torch.tensor([1.3,4.6])
b = torch.tensor([2,4],dtype=torch.short)
c = a.type_as(b)
print('c:',c)

 

 

 

PyTorch是一个广泛使用的深度学习框架,它提供了一套丰富的操作来处理张量(tensor)数据。将tensor转换为图片并显示是深度学习常见的操作之一。如果你遇到了将tensor数据类型转换为jpg图片后图片显示破损的问题,可能是因为以下几个原因: 1. 数据类型问题:在转换之前,确保tensor数据类型是正确的。通常,显示图片需要的数据类型是`uint8`,范围是0到255。如果tensor数据类型是`float`或`double`,需要将其缩放到[0, 255]的范围内,并且转换为`uint8`类型。 2. 图像范围问题:tensor存储的像素值需要是有效的。在深度学习,经常使用[0, 1]或[-1, 1]来表示图像的像素范围。如果图片像素值超出了[0, 255]的范围,显示时会被截断,导致图片破损。 3. 保存格式问题:使用PyTorch保存图片时,需要确保使用正确的格式和正确的函数。如果保存为jpg格式,可以使用Pillow库的`Image.fromarray`函数和`save`方法。 下面是一个基本的例子,展示如何将tensor转换并保存为jpg格式的图片: ```python import torch import torchvision.transforms as transforms from PIL import Image # 假设tensor是已经存在的图像数据,例如:tensor = torch.rand(3, 224, 224) # 转换tensor数据类型为uint8 tensor = (tensor * 255).to(dtype=torch.uint8) # 如果tensor是一个单通道的灰度图像,需要增加一个维度使其变成三通道 if tensor.ndim == 2: tensor = tensor.unsqueeze(0) # 使用Pillow库将tensor转换为图片 img = Image.fromarray(tensor.numpy()) # 保存图片 img.save('output_image.jpg') ``` 在执行上述代码之前,请确保你的tensor数据是正确的,并且已经按照上述步骤处理过。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值