NNDL 实验二 pytorch入门
一. 概念:张量、算子
1.张量:在深度学习框架中,数据经常用张量(Tensor)的形式来存储。张量是矩阵的扩展与延伸,可以认为是高阶的矩阵,是标量,向量,矩阵的高维拓展。
2.算子:算子是构建复杂机器学习模型的基础组件,包含一个函数f(x)的前向函数和反向函数。
二. 使用pytorch实现张量运算
1.2 张量
1.2.1 创建张量
创建一个张量可以有多种方式,如:指定数据创建、指定形状创建、指定区间创建等。
1.2.1.1 指定数据创建张量
通过给定Python列表数据,可以创建任意维度的张量。
(1)通过指定的Python列表数据[2.0, 3.0, 4.0],创建一个一维张量。
#导入torch
import torch
ndim_1_Tensor = torch.tensor([2.0, 3.0, 4.0])
print(ndim_1_Tensor)
运行结果:
tensor([2., 3., 4.])
(2)通过指定的Python列表数据来创建类似矩阵(matrix)的二维张量。
ndim_2_Tensor = torch.tensor([[1.0, 2.0, 3.0],[4.0, 5.0, 6.0]])
print(ndim_2_Tensor)
运行结果:
tensor([[1., 2., 3.],
[4., 5., 6.]])
(3)同样地,还可以创建维度为3、4…N等更复杂的多维张量。
ndim_3_Tensor = torch.tensor([[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], [[11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]])
print(ndim_3_Tensor)
运行结果:
tensor([[[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]],
[[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]]])
需要注意的是,张量在任何一个维度上的元素数量必须相等。下面尝试定义一个在同一维度上元素数量不等的张量。
ndim_2_Tensor = torch.tensor([[1.0, 2.0],[4.0, 5.0, 6.0]])
运行结果:
ndim_2_Tensor = torch.tensor([[1.0, 2.0],[4.0, 5.0, 6.0]])
ValueError: expected sequence of length 2 at dim 1 (got 3)
从输出结果看,这种定义情况会抛出异常,提示在任何维度上的元素数量必须相等。
1.2.1.2 指定形状创建
m=2
n=3
# 使用paddle.zeros创建数据全为0,形状为[m, n]的Tensor
zeros_Tensor = torch.zeros([m, n])
# 使用paddle.ones创建数据全为1,形状为[m, n]的Tensor
ones_Tensor = torch.ones([m, n])
# 使用paddle.full创建数据全为指定值,形状为[m, n]的Tensor,这里我们指定数据为10
full_Tensor = torch.full([m, n], 10)
print('zeros Tensor: ', zeros_Tensor)
print('ones Tensor: ', ones_Tensor)
print('full Tensor: ', full_Tensor)
运行结果:
zeros Tensor: tensor([[0., 0., 0.],
[0., 0., 0.]])
ones Tensor: tensor([[1., 1., 1.],
[1., 1., 1.]])
full Tensor: tensor([[10., 10., 10.],
[10., 10., 10.]])
1.2.1.3 指定区间创建
arange_Tensor = torch.arange(start=1, end=5, step=1)
print('arange_Tensor:', arange_Tensor)
linspace_Tensor = torch.linspace(start=1, end=5, steps=