详解pytorch中的常见的Tensor数据类型以及类型转换

本文详细介绍了PyTorch中Tensor的四种基本数据类型:float32、float64、int32和int64,以及如何通过torch.FloatTensor、torch.DoubleTensor、torch.IntTensor和torch.LongTensor构建它们。此外,还提到了torch.Tensor的类型转换方法,如long()和type(torch.int64)。同时,文章讨论了不同类型之间的转换,并提供了将Tensor与其他数据结构(如list和numpy数组)相互转换的示例。最后,简要提及了GPU上Tensor的使用和与CPU间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概览

本文主要讲pytorch中的常见的Tensor数据类型,例如:float32float64int32int64。构造他们分别使用如下函数:torch.FloatTensor()torch.DoubleTensor(), torch.IntTensor(), torch.LongTensor()

Tensor的构建

1.32-bit floating point:

a=torch.FloatTensor([1.0,3.0])#a=torch.Tensor([1.0,3.0])和前面等价
print(a.dtype)
#torch.float32

2.64-bit floating point

a=torch.DoubleTensor([1,3])
print(a.dtype)
#torch.float64

3.32-bit integer (signed)

a=torch.IntTensor([1,3])
print(a.dtype)
#torch.int32

4.64-bit integer (signed)

a=torch.LongTensor([1,3])
print(a.dtype)
#torch.int64

补充

type(a)
#torch.Tensor

torch.Tensor作为一个对象,你创建的所有Tensor,不管是什么数据类型,都是torch.Tensor类,其所有元素都只能是单一数据类型。即:

A torch.Tensor is a multi-dimensional matrix containing elements of a single data type

即使你给的数据有多种类型,其会自动转换。比如:

a=torch.LongTensor([1,3.1])
print(a.dtype)
#torch.int64
a
#tensor([1, 3])

除了用上述构建方法构建torch.Tensor之外,还可以用torch.tensor()来构建,我个人比较喜欢这个,因为其功能更加强大。上面那种torch.xxxTensor()的方式要记好几种,这里有像numpy那样的dtype参数直接指定,可以看作是前面的升级版吧。

a=torch.tensor([1,3.1],dtype=torch.int32)#指定是哪种数据类型就是哪种。
print(a.dtype)
#torch.int32
a
tensor([1, 3], dtype=torch.int32)

本节最后,上面4中数据类型一般够用,其他还有torch.int8,torch.uint8,torch.bool。如果不够?可以参考:
https://pytorch.org/docs/stable/tensors.html
在这里插入图片描述

类型转换

下面会介绍两种方法:long()type(torch.int64),显然后者比较容易记住,是我比较喜欢的。

a=torch.tensor([1,2],dtype=torch.int32)
print(a)
b=a.long()
print(b)
print(b.dtype)
c=a.type(torch.int64)
print(c)
print(c.dtype)
print(a)

在这里插入图片描述
有人会疑惑,为什么第二行输出没有显示dtype=,因为默认就是torch.int64

附录

list,numpy,tensor之间相互转换的方法:

a=[[1,2],[3,4]]#list
print(a)
b=np.array(a)#list->numpy
print(b)
c=torch.tensor(a)#list->tensor
print(c)
print(b.tolist())#numpy->list
print(c.tolist())#tensor->list
print(torch.tensor(b))#numpy->tensor
print(torch.from_numpy(b))#同上
print(c.numpy())#tensor->numpy

在这里插入图片描述
对了,温馨提示,tensor可以在GPU上运行,其他两个都不可以,这就是为什么你用GPU运行的时候有时会报不是tensor的错误,必须先转化为tensor。
还有,GPU上的tensor不能直接转为numpy,需要先放到CPU上。

a=a.cpu()#放到CPU
a.numpy()#这才对。

放回GPU上?

a=a.cuda()#放到GPU

当然啦,cuda(),cpu()还有一种写法:

device=torch.device("cpu")#torch.device("cuda")
a=torch.tensor([1,2])
a.to(device)#放到CPU

完结撒花
### 回答1: 在使用PyTorch进行机器学习或深度学习的过程中,将Tensor类型转化为图片是常见且必要的一步。PyTorch提供了很多方法将Tensor类型转化为图片,以下是其中的两种方法: 方法一:使用PIL库 通过PIL库将Tensor类型转化为图片是一种简单且高效的方法。以下是具体的实现步骤: 1. 首先,需要将Tensor类型转化为numpy数组。 2. 然后,将numpy数组转化为PIL图像。 3. 最后,将PIL图像保存为图片或者显示出来。 以下是代码示例: import torch from PIL import Image # 将Tensor类型转化为numpy数组 tensor = torch.randn(3, 256, 256) numpy_array = tensor.numpy() # 将numpy数组转化为PIL图像 image = Image.fromarray(numpy_array) # 保存图像 image.save('test.png') # 显示图像 image.show() 方法二:使用matplotlib库 matplotlib是一个常用的数据可视化库,其中包含了将Tensor类型转化为图片的方法。以下是具体的实现步骤: 1. 首先,需要将Tensor类型转化为numpy数组。 2. 然后,使用matplotlib的imshow函数将numpy数组显示为图像。 3. 最后,使用show函数显示出来。 以下是代码示例: import torch import matplotlib.pyplot as plt # 将Tensor类型转化为numpy数组 tensor = torch.randn(3, 256, 256) numpy_array = tensor.numpy() # 显示图像 plt.imshow(numpy_array) plt.show() 总结: 以上就是将Tensor类型转化为图片的两种方法。这些方法也可以用于将Tensor类型的数据可视化。在实际应用中,可以根据具体的情况选择合适的方法。 ### 回答2: PyTorch是一个流行的开源深度学习框架,用户可以将张量(tensor)类型的数据输入到神经网络模型中进行训练并进行预测。在有些情况下,我们可能需要将张量数据转化为图片的形式进行可视化。 在PyTorch中,将张量类型转化为图片需要使用到PIL库,因此需要先安装PIL库。 一般而言,将张量转换为图片的步骤如下: 1.首先,我们需要有一个张量,该张量的形状应该为(N, C, H, W)。其中,N表示图片的数量,C表示图片的通道数(例如:灰度图像为1通道,RGB图像为3通道),H和W表示图片的高度和宽度。 2.接下来,我们需要将张量中的数值范围规范化到0到255之间,方便后续处理。如果张量的最大值和最小值不在0到255之间,我们可以使用torch.clamp()函数将张量数值限制在0到255之间。 3.外部PIL库需要将张量转换为图片格式的数字数组。因此,我们需要使用torch.Tensor.permute()函数将张量尺寸重新排列。如果使用的是彩色图像,则张量的尺寸应该为(N, H, W, C)。如果使用的是灰度图像,则张量的尺寸应该为(N, H, W)。 4.现在,我们可以使用PIL库中的Image.fromarray()函数将调整后的张量数据转化为图片。如果使用的是彩色图像,则需要设置参数mode='RGB'。如果使用的是灰度图像,则需要设置参数mode='L'。 5.最后,我们可以调用图片对象的save()函数将图片保存到本地文件中,或者调用show()函数在程序中显示转换后的图片。 下面是一个示例代码,将张量转换为图片并保存到本地: ``` import torch from PIL import Image # 定义一个4张,3通道,高为128,宽为128的随机张量 t = torch.randn(4, 3, 128, 128) # 将张量数值范围规范化到0~255之间 t = torch.clamp(t * 255, 0, 255) # 将张量尺寸重新排列,将通道数C放到最后一维 t = t.permute(0, 2, 3, 1) # 将张量转换为图片对象 img = Image.fromarray(t[0].cpu().numpy().astype('uint8'), mode='RGB') # 保存图片到本地 img.save('tensor_to_image.jpg') ``` 在上述示例代码中,我们首先定义一个随机纯色张量t,该张量的大小为(4, 3, 128, 128),即有4张128x128像素的三通道彩色图像。接下来,我们使用torch.clamp()函数将张量中的数字限制在0~255之间,再将张量尺寸重新排列,将通道数放到最后的维度。接着,我们使用PIL库中的Image.fromarray()函数将张量转换为图片对象img,该图片对象可以使用save()函数保存到本地文件,或者使用show()函数在程序中进行查看。 总之,将张量类型转化为图片的主要步骤是将张量尺寸重新排列,并使用PIL库将调整后的张量数据转换为图片格式的数字数组。这样便可以转换为可以呈现的图像。 ### 回答3: 在 PyTorch 中,将 Tensor 转化为图片主要分为两种情况:将 Tensor 保存为图片文件和在代码中将 Tensor 可视化为图片。以下分别介绍这两种情况的具体实现方法: 一、将 Tensor 保存为图片文件 1. 使用 PIL 库将 Tensor 转化为图片 首先需要导入 PIL 库: ``` from PIL import Image ``` 然后,将 Tensor 转化为 PIL 图片对象: ``` tensor_image = torch.tensor(image_data) # image_data 为 Tensor 格式的数据 pil_image = Image.fromarray(tensor_image.numpy()) ``` 最后将保存为图片: ``` pil_image.save("image.png") ``` 2. 使用 OpenCV 库将 Tensor 转化为图片 首先需要导入 OpenCV 库: ``` import cv2 ``` 然后,将 Tensor 转化为 cv2 图片对象: ``` tensor_image = torch.tensor(image_data) # image_data 为 Tensor 格式的数据 cv2_image = cv2.cvtColor(tensor_image.numpy(), cv2.COLOR_RGB2BGR) ``` 最后将保存为图片: ``` cv2.imwrite("image.png", cv2_image) ``` 二、在代码中将 Tensor 可视化为图片 在使用 PyTorch 进行神经网络训练的时候,可以使用一些工具库来可视化训练过程中的结果,例如使用 TensorBoard 或者使用 matplotlib 库可视化。以下是使用 matplotlib 库的方法: 首先需要导入 matplotlib 库: ``` import matplotlib.pyplot as plt ``` 然后,使用以下代码将 Tensor 可视化为图片: ``` plt.imshow(tensor_image.permute(1, 2, 0).cpu().numpy()) # tensor_image 为 Tensor 格式的数据 plt.show() ``` 在这里需要注意的是,如果 Tensor 的通道数为第一维,需要使用 `permute` 函数将通道维度移动到最后一维。如果 Tensor 存储在 GPU 上,需要使用 `cpu()` 函数将 Tensor 转移到 CPU 上后再进行可视化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值