小白的进阶之路系列之五----人工智能从初步到精通pytorch张量
张量
张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量来编码模型的输入和输出,以及模型的参数。
张量类似于NumPy的ndarray,除了张量可以在gpu或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而消除了复制数据的需要(参见NumPy Bridge)。张量还针对自动微分进行了优化(稍后我们将在Autograd一节中看到更多相关内容)。如果您熟悉ndarray,那么您将对Tensor API非常熟悉。如果没有,跟着做!
import torch
import numpy as np
初始化张量
张量可以用不同的方式初始化。看看下面的例子:
直接从数据中
张量可以直接从数据中创建。自动推断数据类型。
data = [[1, 2],[3, 4]]
x_data = torch.tensor(data)
从NumPy数组
张量可以从NumPy数组中创建(反之亦然——参见NumPy Bridge)
np_array = np.array(data)
x_np = torch.from_numpy(np_array)
从另一个张量:
新张量保留参数张量的属性(形状,数据类型),除非显式覆盖。
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.9528, 0.1439],[0.9406, 0.3689]])
具有随机或恒定值的:
形状是张量维的元组。在下面的函数中,它决定了输出张量的维数。
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}")
输出为:
Random Tensor:tensor(</