PyTorch 张量(笔记)

1. 张量简介

在深度学习中,我们通常将数据以张量的形式进行表示。几何代数中定义的张量是基于向量和矩阵的推广,比如我们可以将标量视为零阶张量,矢量视为一阶张量,矩阵就是二阶张量。

张量维度 代表含义
0 阶张量 代表标量(数字)
1 阶张量 代表向量
2 阶张量 代表矩阵
3 阶张量 时间序列数据、股价、文本数据、单张彩色图片(RGB)

张量是现代机器学习的基础,它的核心是一个数据容器。

比如,一个图像可以用三个字段表示:

(height, width, channel) = 3D

但是,在机器学习工作中,我们经常要处理不止一张图片或一篇文档------我们要处理一个集合。我们可能有 10000 张郁金香的图片,这意味着,我们将用到 4D 张量:

(batch_size, height, width, channel) = 4D

2. 常见构造 Tensor(张量) 的方法

2.1 torch.Tensor(sizes)

基础构造函数,传入参数 sizes 为你要构造的张量的大小

import torch
x = torch.Tensor(4, 3)
print(x)

output: 大小为 4 行 3 列的 tensor

tensor([[0.0000e+00, 0.0000e+00, 0.0000e+00],
             [0.0000e+00, 0.0000e+00, 0.0000e+00],
             [2.7403e+31, 4.5894e-41, 0.0000e+00],
             [4.5894e-41, 0.0000e+00, 0.0000e+00]])

2.2 torch.tensor(data)

传入参数为数据,该方法可以将传入的数据转换为张量类型,类似于 np.array()

x = torch.tensor(((3, 4), (5, 6)))
y = torch.tensor([[5, 6], [7, 8]])
print(x)
print(y)

output: 大小为 2 行 2 列的 tensor

tensor([[3, 4],
             [5, 6]])
tensor([[5, 6],
             [7, 8]])

2.3 torch.ones(size)

Returns a tensor filled with the scalar value 1, with the shape defined by the variable argument size.

返回大小为 size 的张量,且张量的元素全为 1.

x = torch.ones(3, 4)
y = torch.ones(4, 3)
print(x)
print(y)

output1: 大小为 3 行 4 列且元素全为 1 的 tensor

output2: 大小为 4 行 3 列且元素全为 1 的 tensor

tensor([[1., 1., 1., 1.],
             [1., 1., 1., 1.],
             [1., 1., 1., 1.]])
tensor([[1., 1., 1.],
             [1., 1., 1.],
             [1., 1., 1.],
             [1., 1., 1.]])

2.4 torch.zeros(size)

Returns a tensor filled with the scalar value 0, with the shape defined by the variable argument size.

返回大小为 size 的张量,且张量的元素全为 0.

x = torch.zeros(3, 4)
y = torch.zeros(2, 4, 3)
print(x)
print(y)

output1: 大小为 3 行 4 列且元素全为 0 的 2-D tensor

output2: 大小为 2 个 4 行 3 列且元素全为 0 的 3-D tensor

tensor([[0., 0., 0., 0.],
             [0., 0., 0., 0.],
             [0., 0., 0., 0.]])

tensor([[[0., 0., 0.],
              [0., 0., 0.],
              [0., 0., 0.],
              [0., 0., 0.]],

             [[0., 0., 0.],
              [0., 0., 0.],
              [0., 0., 0.],
              [0., 0., 0.]]])

2.5 torch.eye(size)

Returns a 2-D tensor with ones on the diagonal and zeros elsewhere.

返回对角线位置元素为 1,其余元素为 0 的 2-D tensor

x = torch.eye(2, 2)
print(x)

output: 大小为 2 行 2 列且对角线元素为 1 的 2-D tensor

tensor([[1., 0.],
             [0., 1.]])

2.6 torch.arange(start, end, step)

Returns a 1-D tensor of size [(end - start)/step]向上取整 with values from the interval [start, ebd) taken with common difference step beginning from start.

从 start 到 end(不包括 end),步长为 step

x = torch.arange(0, 5, 2)
print(x)

output: 大小为 3 的 1-D tensor

tensor([0, 2, 4])

2.7 torch.linspace(start, end, steps)

Creates a one-dimensional tensor of size steps whose values are evenly spaced from start to end, inclusive.

从 start 到 end, 均匀分成 steps 份

x = torch.linspace(0, 5, 3)
print(x)

output: 大小为 3 的 1-D tensor

tensor([0.0000, 2.5000, 5.0000])

2.8 torch.rand(size)

Returns a tensor filled with random numbers from a uniform distribution on the interval [0, 1).

返回大小为 size 的 tensor, 且元素是从 [0, 1) 的均匀分布中随机抽样得到的

x = torch.rand(3, 4)
print(x)

output: 大小为 3 行 4 列的 2-D tensor

tensor([[0.8534, 0.4159, 0.6908, 0.6090],
             [0.9596, 0.6302, 0.2386, 0.0030],
             [0.0385, 0.0453, 0.9093, 0.7404]])

2.9 torch.randn(size)

Returns a tensor filled with random numbers from a normal distribution with mean 0 and variance 1 (also called the standard normal distribution).

返回大小为 size 的 tensor, 且元素是从 N(0, 1) 的标准正态分布中抽样得到的

x = torch.randn(3, 4)
print(x)

output: 大小为 3 行 4 列的 2-D tensor

tensor([[-0.5574,  0.2918, -0.1390, -0.4547],
             [-0.2857,  1.3215, -0.8996,  0.9009],
             [ 0.0821,  0.4812, -0.7390,  0.9282]])

2.10 torch.normal(mean, std, size)

Returns a tensor of random numbers drawn from separate normal distributions whose mean and standard deviation are given. The resulting tensor has size given by size.

返回大小为 size 的 tensor, 且元素是从 均值为 mean, 标准差为 std 的正态分布中抽样得到的

x = torch.normal(2, 3, size=(1, 4))
print(x)

 output: 大小为 1 行 4 列的 2-D tensor

tensor([[ 3.2998, -1.4687, -4.2944,  3.8635]])

2.11 torch.randperm(n)

Returns a random permutation of integers from 0 to n - 1.

返回 0 ~ n - 1 之间整数的随机排列

x = torch.randperm(4)
print(x)

output: 大小为 4 的 1-D tensor

tensor([3, 0, 1, 2])

参考文献:

深入浅出PyTorch — 深入浅出PyTorch

PyTorch documentation — PyTorch 1.13 documentation 

你可能感兴趣的:(DeepLearning,pytorch,python)