torch.Tensor

torch.Tensor是一种包含单一数据类型元素的多维矩阵。

Torch定义了七种CPU tensor类型和八种GPU tensor类型:

torch.Tensor_第1张图片
一个张量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.Tensortorch.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。

Tensor类型之间的转换

  • CPU和GPU的Tensor之间转换
    • data.cuda():cpu –> gpu
    • data.cpu():gpu –> cpu
  • Tensor与Numpy Array之间的转换
    • data.numpy():Tensor –> Numpy.ndarray
    • torch.from_numpy(data):Numpy.ndarray –> Tensor
  • Tensor的基本类型转换
    • tensor.long():
    • tensor.half():将tensor投射为半精度浮点(16位浮点)类型
    • tensor.int():
    • tensor.double():
    • tensor.float():
    • tensor.char():
    • tensor.byte():
    • tensor.short():
  • Tensor的基本数据类型转换
    • type(dtype=None, non_blocking=False, **kwargs):指定类型改变。例如data = data.type(torch.float32)
    • type_as(tensor):按照给定的tensor的类型转换类型。

你可能感兴趣的:(Tensor)