☰
Pytorch基础:标量(零阶张量)
2026/10/27 1:14:08 网站建设 项目流程

相关阅读

Pytorch基础https://chenzhang.blog.csdn.net/article/details/136570774


在PyTorch中,标量(Scalar)是一种只包含单个数值的零阶张量。也就是说,它的本质仍然是一个Tensor,只不过没有任何维度(dim=0)。需要注意的是:“只有一个元素的张量”并不一定是标量,这一点在初学时很容易混淆。标量在深度学习中非常常见,通常用来表示损失函数的值、某些统计量(mean、sum)、单个参数值或中间计算结果。

创建标量可以使用torch.tensor()或torch.scalar_tensor()函数,两者在效果上基本一致,如下所示:

scalar_tensor_1 = torch.scalar_tensor(3.14) # 该函数只能接受一个数字作为参数 scalar_tensor_2 = torch.tensor(3.14) # 传递一个数字作为参数 print(scalar_tensor_1, scalar_tensor_2) print(scalar_tensor_1.dim(), scalar_tensor_2.dim()) tensor(3.1400) tensor(3.1400) # 注意:tensor的小括号内没有中括号,这也是区分标量与其他张量的一个直观方式 0 0 # 0阶张量

下面创建了只有一个元素的一阶张量(又被称为向量),它拥有一个维度,所以并不是标量。

tensor_1 = torch.tensor([3.14]) # 传递一个只含一个数字的列表作为参数 tensor_2 = torch.tensor((3.14,)) # 传递一个只含一个数字的元组作为参数,注意元组内的逗号不可省略,否则会被当做一个数字,而创建一个标量 print(tensor_1, tensor_2) print(tensor_1.dim(), tensor_2.dim()) tensor([3.1400]) tensor([3.1400]) # 注意:tensor的小括号内有中括号 1 1 # 1阶张量

标量的形状(shape)是一个空的torch.Size类对象,而只含一个元素的一阶张量的形状是一个与阶数匹配的torch.Size类对象,如下所示:

scalar_tensor = torch.tensor(3.14) # 标量 tensor = torch.tensor([3.14]) # 一阶张量 print(scalar_tensor.shape, tensor.shape) torch.Size([]) torch.Size([1])

一些会导致降维的操作也会创建标量,例如min(),max(),sum(),mean()等,如下所示:

tensor = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32) scalar_1 = tensor.min() scalar_2 = tensor.max() scalar_3 = tensor.sum() scalar_4 = tensor.mean() print(scalar_1, scalar_2, scalar_3, scalar_4) tensor(1.) tensor(4.) tensor(10.) tensor(2.5000)

需要特别注意的是:标量在参与计算时会自动进行广播(broadcasting),如下所示:

x = torch.tensor([1, 2, 3]) y = torch.tensor(2) print(x + y) tensor([3, 4, 5])

这里的标量y会自动扩展成与x相同形状,从而完成逐元素计算。这也是标量在深度学习中非常方便的一点。

另外,在工程中经常会遇到一个需求:将标量转换为Python数值,例如用于日志打印或条件判断。这时可以使用.item()方法,如下所示:

loss = torch.tensor(0.1234) print(loss.item(), type(loss.item())) 0.1234 <class 'float'>

需要注意的是,.item()只能作用在“只包含一个方法元素的张量”上,否则会报错,因此它既适用于标量,也适用于 shape=[1]的一阶张量,但不能用于包含多个元素的张量。

总的来说,真正理解“标量”与“一阶单元素张量”的区别,对于掌握PyTorch的维度、形状、广播规则、自动求导行为至关重要。两者虽然看起来类似,但在许多地方表现完全不同,尤其是在模型接口、损失计算和张量操作流程中。学会通过dim()、shape、打印格式等方式辨别它们,你就能够避免许多初学者常遇到的维度错误,并写出更稳定、更符合PyTorch规范的代码。

下面的博客介绍了PyTorch中相量相关的各种乘法,感兴趣的读者可以阅读。

Pytorch基础:张量相关的乘法(torch.mul、torch.mv、torch.matmul、torch.mm、torch.bmm、torch.dot、torch.tensordot、*、@)https://chenzhang.blog.csdn.net/article/details/137781292

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询