(1)N维数组
0-d 标量、1-d向量、2-d矩阵、3-d RGB图片(宽x高x通道).....
(2)代码实战
① 新建一个张量。
张量表示一个数值组成的数组,这个数组可能是多个维度。
② 通过shape属性来访问张量的形状 和 张量中元素的总数。
③ 要改变一个张量的形状,而不改变元素的数量和元素值,我们可以通过reshape函数。
④ 使用全0、全1、其他常量或从特定分布中随机采样的数字。
⑤ 通过提供包含数值的Python列表来为所需张量中的每个元素赋予确定值。
⑥ 常见的标准算术运算
2、广播机制
①① 可以用[-1] 选择最后一个元素,用[1:3]选择第二个和第三个元素。
①② 可以通过指定索引来将元素写入矩阵
①④ 一些操作可能会导致为新结果分配内存
4、数据预处理
(1)创建人工数据集,并存储在csv文件
(2)填充缺失值。
使用均值、中位数或众数填充或删除
11、自动求导
自动求导通常基于两种模式:前向模式和反向模式。
12、梯度
调用一个Tensor的.backward()
方法时,PyTorch会沿着这个DAG反向传播求梯度。
.detach()
和torch.no_grad()
.detach()
方法用于将Tensor从计算图中分离出来,返回一个与原Tensor相同但不再需要梯度的Tensor。torch.no_grad()
是一个上下文管理器,可以在执行代码块时暂时禁用梯度计算。
代码:
import torch
# 定义变量,requires_grad=True表示需要计算梯度
x = torch.tensor([2.0, 3.0], requires_grad=True)
y = torch.tensor([4.0, 1.0], requires_grad=True)
# 执行操作
z = x * y
# 反向传播前,需要定义一个标量(scalar)作为目标函数,这里我们取z的和
out = z.sum()
# 反向传播,计算梯度
out.backward()
# 打印梯度
print(x.grad) # 输出: tensor([4., 1.]),即dz/dx
print(y.grad) # 输出: tensor([2., 3.]),即dz/dy