torch.max()使用讲解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了torch.max()使用讲解相关的知识,希望对你有一定的参考价值。
参考技术A 在分类问题中,通常需要使用 max() 函数对 softmax 函数的输出值进行操作,求出预测值索引,然后与标签进行比对,计算准确率。下面讲解一下 torch.max() 函数的输入及输出值都是什么,便于我们理解该函数。output = torch.max(input, dim)
在多分类任务中我们并不需要知道各类别的预测概率,所以返回值的第一个 tensor 对分类任务没有帮助,而第二个 tensor 包含了预测最大概率的索引,所以在实际使用中我们仅获取第二个 tensor 即可。
下面通过一个实例可以更容易理解这个函数的用法。
输出:
索引每行的最大值:
输出:
在计算准确率时第一个tensor values 是不需要的,所以我们只需提取第二个tensor,并将tensor格式的数据转换成array格式。
输出:
这样,我们就可以与标签值进行比对,计算模型预测准确率。
*注:在有的地方我们会看到 torch.max(a, 1).data.numpy() 的写法,这是因为在早期的pytorch的版本中,variable变量和tenosr是不一样的数据格式,variable可以进行反向传播,tensor不可以,需要将variable转变成tensor再转变成numpy。现在的版本已经将variable和tenosr合并,所以只用 torch.max(a,1).numpy() 就可以了。
predict - softmax函数输出
label - 样本标签,这里假设它是one-hot编码
从图像角度理解torch.mean()函数。继而学习torch.max等等相关函数
(1)归根到底,torch.mean()函数是求平均值的
(2)深度学习时,图片通常是四位的即[b,c,h,w]。其中b表示图片个数,c、h、w分别表示每一个图片通道数,高和宽
假设 y = torch.arange(24).view(2,2,3,2)。也就是有两个图片,每个图片的维度、高、宽是2,3,2
①torch.mean(dim = 0 , keepdim = True)
对某一个维度求torch.mean()我们就首先将该维度置为1,因此,这个最终结果的维度一定是[1,2,3,2]。
0为表示的是图像个数,也就是对每一个图像的对应位置求平均值。(下面这段内容可以不看:在看一篇vit相关的论文时,特征图是[b,HW,C],这时在第0维度上进行求平均值代替平均池化的操作。)
②torch.mean(dim = 1 , keepdim = True)
对某一个维度求torch.mean()我们就首先将该维度置为1,因此,这个最终结果的维度一定是[2,1,3,2]。
1维为表示的是每个图像的通道,也就是在同一个图像的对应通道像素值进行求平均,如图。
③torch.mean(dim = 3 , keepdim = True)
对某一个维度求torch.mean()我们就首先将该维度置为1,因此,这个最终结果的维度一定是[2,2,1,2]。第四维我们就不做了实际上从这就已经很清晰啦。
2维为表示的是每个图像的每一个通道的高,因此我们要对每一个图像的每一个通道上的每一个高进行求平均,如图。
以上是关于torch.max()使用讲解的主要内容,如果未能解决你的问题,请参考以下文章
PyTorch中的torch.max()和torch.maximum()的用法详解
torch.max()函数predic = torch.max(outputs.data, 1)[1].cpu().numpy()
关于 decoder_outputs[:,t,:] = decoder_output_t torch.topk, torch.max(),torch.argmax()的演示