直观理解torch.gather函数(带图)

直观理解torch.gather函数

1. gather的作用

因为深度学习里面,像分类或者分割,有时候去进行loss计算或准确度计算的时候,需要挑选某个维度特定的值,所以有了这么个函数。注意不要高估这个函数的能力,这个函数只是在指定维度上挑出某个指定的值。

2. gather的解释

官方解释: 链接: https://pytorch.org/docs/stable/generated/torch.gather.html

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0
out[i][j][k] = input[i][index[i][j][k]][k]  # if dim == 1
out[i][j][k] = input[i][j][index[i][j][k]]  # if dim == 2

第一种理解方式(白话版):是从input矩阵中,获取一个与index矩阵大小相同的output矩阵。规则是,在获取output值时,按照设定的dim和index对应位置的值,从input矩阵中取值出来。

第二种理解方式(程序员版):把index矩阵的元素对应的下标取出来,用这个取出来的元素的值替换下标中指定的维度(dim)的值

第三种方式(画图):

在这里插入图片描述
橙色矩阵是input矩阵,绿色矩阵是index矩阵,也是output矩阵,因为output矩阵和index矩阵是一样大的。红色矩阵是index矩阵和output矩阵中对应的第一个元素,红色这个元素的值是在三个维度中,指定一个维度,然后在这个维度上去取,取index矩阵这个位置对应的那个值为下标的input矩阵中的值。

### 回答1: torch.gather函数是PyTorch中的一个函数,用于在给定维度上按索引从输入张量中提取元素并构建新的张量。 torch.gather函数的语法为:torch.gather(input, dim, index, out=None)。 参数说明: - input:输入张量,即需要从中提取元素的张量。 - dim:要在哪个维度上进行提取操作。 - index:一个包含需要提取元素的索引的张量。 - out:一个可选的输出张量。 在torch.gather函数中,我们会按照dim指定的维度,在input张量上进行提取操作。提取操作是根据index张量中给定的索引值来进行的。最终会构建一个新的张量,其中包含了根据索引从input张量中提取出来的元素。 例如,如果input是一个2维张量,shape为(3,4),而index是一个1维张量,shape为(3,),则dim的取值范围为[0, 1]。如果dim=0,那么提取操作将沿着第一个维度进行,在每一列上按照index张量中对应的值进行元素的提取。如果dim=1,那么提取操作将沿着第二个维度进行,在每一行上按照index张量中对应的值进行元素的提取。 使用torch.gather函数可以灵活地根据给定的索引从输入张量中提取出所需的元素,这对于实现一些特定需求的操作非常有用。例如,可以在处理图像分类任务时,根据预测的类别标签,从softmax输出概率中提取出对应类别的概率,进而用于计算损失函数或者评估模型性能等。 ### 回答2: torch.gather函数是一个PyTorch中的操作函数,用于在指定维度上根据索引获取原始张量中的元素。这个函数的使用方式为: output = torch.gather(input, dim, index, out=None, sparse_grad=False) 其中,input是原始的张量,dim是指定的维度,index是需要提取的元素的索引。函数会根据dim指定的维度,在input张量中提取index中指定的元素,并返回一个新的张量output。 例如,假设input是一个3x4的二维张量,index是一个2x3的二维张量,dim的取值为1,那么torch.gather函数会在input的第1个维度上根据index中的元素索引,提取相应的元素。最终得到的output是一个2x3的张量。 torch.gather函数在很多机器学习任务中非常有用。例如,在序列标注任务中,我们可以使用torch.gather函数根据标签索引来选择对应的预测结果。在图像分类任务中,我们可以根据类别索引使用torch.gather函数进行结果的选择。此外,在自然语言处理任务中,torch.gather函数也可以用来根据单词的索引来选择对应的词向量。 需要注意的是,所提取的元素的维度必须与index的维度一致,否则会引发异常。此外,dim的取值必须在0到input的维度之间,否则也会引发异常。如果不指定out参数,函数会返回一个新的张量作为输出,如果指定了out参数,则会把提取的结果保存到指定的张量中。最后,如果sparse_grad为True,则会返回一个稀疏梯度,否则返回一个密集梯度。 总之,torch.gather函数提供了一种方便和高效地根据索引提取元素的方式,广泛应用于各种机器学习任务中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值