【Pytorch进阶】torch.sum()中dim的使用

本文介绍了PyTorch中torch.sum()函数的使用,包括一维、二维和三维矩阵的求和操作。通过示例展示了如何按不同维度进行求和,并提供了相关代码实现。对于理解和应用PyTorch张量运算具有指导意义。
部署运行你感兴趣的模型镜像

1 前言

  当开始用PyTorch张量做一些基本的运算时,如求和,它看起来很简单。但是对于多维的张量求和时就需要仔细思考一下(【Pytorch】张量的维度/轴/dim的理解)。

2 torch.sum()

2.1 一维求和

import torch

x = torch.tensor([1, 2, 3])
torch.sum(x)
tensor(6)

2.2 二维矩阵求和

import torch

x = torch.tensor(      
      [[1, 2, 3],      
      [4, 5, 6]]) 
x.shape  # torch.Size([2, 3])
print(torch.sum(x, dim=0))
# [5, 7, 9]
print(torch.sum(x, dim=1))
# [6, 15]

2.3 三维矩阵求和

y = torch.tensor([
     [[1, 2, 3],
      [4, 5, 6]],
     [[1, 2, 3],
      [4, 5, 6]],
     [[1, 2, 3],
      [4, 5, 6]]])
   
y.shape  # torch.Size([3, 2, 3])

torch.sum(y, dim=0) 
#tensor([[ 3,  6,  9],
#        [12, 15, 18]])

torch.sum(y, dim=1)  # torch.Size([3, 3])
#tensor([[5, 7, 9],
#        [5, 7, 9],
#        [5, 7, 9]])
y = torch.tensor([
    [[1, 2, 3],
     [4, 5, 6]],
    [[1, 2, 3],
     [4, 5, 7]],
    [[1, 2, 3],
     [4, 5, 8]]])
print(torch.sum(y, dim=2))
print(torch.sum(y, dim=2).shape)

#tensor([[ 6, 15],
#        [ 6, 16],
#        [ 6, 17]])
#torch.Size([3, 2])

图解可以看参考文献【1】

3 参考文献

[1]理解PyTorch中的dimensions维度,三维张量求和过程https://blog.youkuaiyun.com/crj0926/article/details/120587826

您可能感兴趣的与本文相关的镜像

PyTorch 2.9

PyTorch 2.9

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

torch.softmax()函数是 PyTorch 中用于将一组未归一化的分数(logits)转换成归一化的概率分布的函数。它通过应用 softmax 函数,将输入张量的每个元素压缩到 (0, 1) 区间内,并且确保输出张量中所有元素的和为 1,从而形成一个概率分布 [^2]。 ### 基本使用 ```python import torch # 创建一个未归一化的分数张量 logits = torch.tensor([1.0, 2.0, 3.0]) # 使用 torch.softmax() 函数将其转换为概率分布 probabilities = torch.softmax(logits, dim=0) print(probabilities) ``` 在上述代码中,`dim=0` 表示在第 0 维上进行 softmax 操作。 ### 多维张量使用 torch.softmax() 函数也可以用于多维张量。以下是一个三维张量的例子 [^3] [^4]: ```python import torch # 创建一个三维张量 y = torch.rand(size=[2, 2, 3]) print(y) # 在不同维度上进行 softmax 操作 result_dim0 = torch.softmax(y, dim=0) result_dim1 = torch.softmax(y, dim=1) result_dim2 = torch.softmax(y, dim=2) print('dim=0的结果是:\n', result_dim0, "\n") print('dim=1的结果是:\n', result_dim1, "\n") print('dim=2的结果是:\n', result_dim2, "\n") ``` 在这个例子中,分别在第 0、1、2 维上进行了 softmax 操作。 ### 利用性质缩放元素 在实际计算中,为了避免数值计算的问题,可以利用 `torch.max()` 函数对输入进行缩放 [^5]。 ```python import torch a = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) tmp = torch.max(a, dim=(0,), keepdim=True)[0] a -= tmp x = torch.exp(a) tmp2 = torch.sum(x, dim=(0,), keepdim=True) x /= tmp2 print(x) ``` 这里,`torch.max()` 函数用于找到每列的最大值,然后将输入张量减去这个最大值,再进行后续的计算。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值