PyTorch中torch.tensor与torch.Tensor参数详解及异同对比
参数分析
tensor()方法
将其他数据类型转换为tensor型数据
torch.tensor(data,dtype=None,device=None,requires_grad=False,pin_memory=False)
参数:
参数 | 含义 |
---|---|
data | 要传入的数据,可以是列表、元组、NumPy、ndarray、标量和其他类型 |
dtype | 数据类型,默认和data类型一致,用来修改变量类型 |
device ( torch.device, optional) | 构造张量的设备。如果 None 并且数据是张量,则使用数据设备。如果 None 并且数据不是张量,则结果张量在 CPU 上构建。 |
requires_grad | 是否保留对应的梯度信息,如需要保留对应的梯度信息就要带上参数requires_grad=True,默认为False |
pin_memory | 若值为True,返回的张量将分配在固定内存中。仅适用于 CPU 张量。默认值:False. |
示例:
import torch
a=torch.tensor([1,3])
b=torch.tensor([1,3],dtype=torch.float32)
print(a)
print(b)
输出:
tensor([1, 3])
tensor([1., 3.])
Tensor()
这是python类,是默认张量类型torch.FloatTensor()的别名,我们每次调用torch.Tensor([1,2, 3, 4, 5])来构造一个tensor的时候,会调用Tensor类的构造函数,生成一个单精度浮点类型的张量。也就是说,torch.Tensor() 的作用实际上跟 torch.FloatTensor() 一样,都是生成一个数据类型为 32 位浮点数的张量,如果没传入数据就返回空张量,如果有列表或者 narray 的返回其对应张量。但无论传入数据本身的数据类型是什么,返回的都是 32 位浮点数的张量。
示例代码:
import torch
print(torch.Tensor(3))
print(torch.Tensor(3,2))
print(torch.Tensor([3,2]))
输出结果:
tensor([0., 0., 0.])
tensor([[3.1992e-12, 1.4583e-19],
[1.0899e+27, 6.8943e+34],
[1.1835e+22, 7.0976e+22]])
tensor([3., 2.])
torch.tensor()与torch.Tensor()表面上只是大小写的区别,但他们是不一样的两个方法,Tensor()是调用Tensor类的构造函数,而tensor()只是一个最普通的方法,下面来分析一下他们的异同:
相同点
都会返回一个Tensor类型的数据
不同点
- Tensor()方法将数据转为tensor类型时会默认将数据转为float类型,而tensor()方法会保留原数据的数据类型;
- Tensor()方法除了将给定的data数据转变为tensor类型外还可生成指定维度大小的tensor数据,数据内容随机,而tensor()方法只能将给定的data数据转变为tensor类型
- Tensor()是 Tensor类的__init__()方法,而tensor()是一个普通的方法
示例代码: - Tensor()不能指定张量的数据类型
import torch
print(torch.Tensor(3,2))
print(torch.Tensor([3,2]))
print(torch.tensor([3,2]))
输出结果
tensor([[1.1632e+33, 3.2598e-12],
[7.4086e+28, 7.1463e+22],
[4.6241e+30, 1.0552e+24]])
tensor([3., 2.])
tensor([3, 2])