• 问答
  • 技术
  • 实践
  • 资源
简单阐述 Pytorch 中的 Tensors
技术讨论

Tensors

Tensors张量是一种特殊的数据结构,它和数组还有矩阵十分相似。在Pytorch中,我们使用tensors来给模型的输入输出以及参数进行编码。Tensors除了张量可以在gpu或其他专用硬件上运行来加速计算之外,其他用法类似于Numpy中的ndarrays。如果你熟悉ndarrays,您就会熟悉tensor的API。如果没有,请按照这个教程,快速了解一遍API。

%matplotlib inline
import torch
import numpy as np

初始化Tensor

创建Tensor有多种方法,如:

直接从数据创建

可以直接利用数据创建tensor,数据类型会被自动推断出

data = [[1, 2],[3, 4]]
x_data = torch.tensor(data)

从Numpy创建

Tensor 可以直接从numpy的array创建(反之亦然-参见bridge-to-np-label)

np_array = np.array(data)
x_np = torch.from_numpy(np_array)

从其他tensor创建

新的tensor保留了参数tensor的一些属性(形状,数据类型),除非显式覆盖

x_ones = torch.ones_like(x_data) # retains the properties of x_data
print(f"Ones Tensor: \n {x_ones} \n")

x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data
print(f"Random Tensor: \n {x_rand} \n")

Ones Tensor:
tensor([[1, 1],
[1, 1]])

Random Tensor:
tensor([[0.6075, 0.4581],
[0.5631, 0.1357]])

从常数或者随机数创建

shape是关于tensor维度的一个元组,在下面的函数中,它决定了输出tensor的维数。

shape = (2,3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")

shape = (2,3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")

Tensor的属性

Tensor的属性包括形状,数据类型以及存储的设备

tensor = torch.rand(3,4)

print(f"Shape of tensor: {tensor.shape}")
print(f"Datatype of tensor: {tensor.dtype}")
print(f"Device tensor is stored on: {tensor.device}")

Shape of tensor: torch.Size([3, 4])
Datatype of tensor: torch.float32
Device tensor is stored on: cpu

Tensor的操作

Tensor有超过100个操作,包括 transposing, indexing, slicing, mathematical operations, linear algebra, random sampling,更多详细的介绍请点击这里
它们都可以在GPU上运行(速度通常比CPU快),如果你使用的是Colab,通过编辑>笔记本设置来分配一个GPU。

# We move our tensor to the GPU if available
if torch.cuda.is_available():
  tensor = tensor.to('cuda')
  • 0
  • 0
  • 301
收藏
暂无评论
18342

大连交通大学 · 其他

大连交通大学 | 本科

  • 1

    关注
  • 0

    获赞
  • 0

    精选文章
文章专栏
  • 367