标量(Scalar):
标量是一个单独的数,它没有方向,只有大小。
在深度学习中,标量通常表示一个单独的数值,例如温度、长度或重量等。
张量(Tensor):
张量是超过二维的数组,可以表示多维数据。
在深度学习中,张量通常用于表示多维数据或特征张量等。
举例说明
x = 1 | 标量 |
x = torch.tensor([[1.0, 1.0], [1.0, 1.0]], requires_grad=True) | 张量,即 |
y = x + 2 | 对张量x每个元素都+2,返回的y依然是张量 |
y = x.sum() 或 y = x.mean() | 对张量x每个元素求总和或平均值,返回的y是标量,即一个数字 |
求导:
求导 d(out)/dx,首先 x 肯定是张量,如果out也是张量,会报错。需要把 out 处理成标量(数字)
一、张量对张量求导,报错
代码
import torch
x = torch.tensor([[1.0, 1.0], [1.0, 1.0]], requires_grad=True) # 定义一个张量,需要求导。里面分别为x1, x2, x3, x4
y = x + 2 # y依然是张量
z = y * y * 3 # z依然是张量
z.backward() # 此处会报错,dz/dx,因为z不是标量,而是一个张量(矩阵)