torch.Tensor是一种包含单一数据类型元素的多维矩阵。
Torch定义了七种CPU tensor类型和八种GPU tensor类型:
一个张量tensor可以从Python的list或序列构建:
>>> torch.FloatTensor([[1, 2, 3], [4, 5, 6]])
1 2 3
4 5 6
[torch.FloatTensor of size 2x3]
一个空张量tensor可以通过规定其大小来构建:
>>> torch.IntTensor(2, 4).zero_()
0 0 0 0
0 0 0 0
[torch.IntTensor of size 2x4]
可以用python的索引和切片来获取和修改一个张量tensor中的内容:
>>> x = torch.FloatTensor([[1, 2, 3], [4, 5, 6]])
>>> print(x[1][2])
6.0
>>> x[0][1] = 8
>>> print(x)
1 8 3
4 5 6
[torch.FloatTensor of size 2x3]
每一个张量tensor都有一个相应的torch.Storage用来保存其数据。类tensor提供了一个存储的多维的、横向视图,并且定义了在数值运算。
注意: 会改变tensor的函数操作会用一个下划线后缀来标示。比如,torch.FloatTensor.abs_()会在原地计算绝对值,并返回改变后的tensor,而tensor.FloatTensor.abs()将会在一个新的tensor中计算结果。这就是我们所熟知的
in-place运算形式
。
class torch.Tensor
class torch.Tensor(*sizes)
class torch.Tensor(size)
class torch.Tensor(sequence)
class torch.Tensor(ndarray)
class torch.Tensor(tensor)
class torch.Tensor(storage)
根据可选择的大小和数据新建一个tensor。如果没有提供参数,将会返回一个空的零维张量。如果提供了numpy.ndarray
,torch.Tensor
或torch.Storage
,将会返回一个有同样参数的tensor.如果提供了python序列,将会从序列的副本创建一个tensor。
torch.Tensor() 和 torch.tensor() 的区别:
torch.Tensor()
是一个类,是默认张量类型torch.FloatTensor()的别名,用于生成一个单精度浮点类型的张量。
a = torch.Tensor([1,2, 3, 4, 5])
print(a)
输出:
tensor([1., 2., 3., 4., 5.])
但是torch.tensor(注意这里是小写)仅仅是python的函数,函数原型是
torch.tensor(data, dtype=None, device=None, requires_grad=False)
其中data可以是:list,tuple,NumPy,ndarray等其他类型,torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应类型的torch.Tensor。
data = data.type(torch.float32)