torch.max()、torch.topk()

在用卷积神经网络对结果进行预测时,输出的是一个Batchsize*n的向量。比如batchsize=64,在ImageNet是1000分类的任务。则输出的是一个64*1000的tensor。这时候,我们想要看看这每张图片的1000个预测值中哪个值最大,最大值对应的下标是多少,进而判断准确率是多少。这时候就需要用到torch.max()函数了。

一、torch.max()、torch.min()

格式:

         torch.max(input, dim)

函数会返回两个tensor,第一个tensor是每行(dim=1时)的最大值;第二个tensor是每行(dim=1时)最大值的索引。【例1】

输入的imput是一个tensor,我们平时用到的就是一个batchsize*n的二维张量。一般就是想得到每行的最大值对应的结果,所以dim一般等于1,如果等于0的话就是取每一列的最大值了。【例1】【例2】。输出一般不想看最大值是多少,而是想看下标是多少,所以结果的第一个tensor一般不要。【例2】

如果不设置维度的话,会求一个全局的最大值。【例3】

例1:

import torch

outputs = torch.randn(3, 5)           #模拟batchsize=3,5分类任务的输出。
print(outputs)

print(torch.max(outputs, 1))

结果:

torch.max()、torch.topk()_第1张图片

例2:

import torch

outputs = torch.randn(3, 5)           #模拟batchsize=3,5分类任务的输出。
print(outputs)

_, predicted = torch.max(outputs, 1)   #取出每一行最大值对应的索引
print(predicted)

结果:

torch.max()、torch.topk()_第2张图片

例3:

import torch

outputs = torch.randn(3, 5)           #模拟batchsize=3,5分类任务的输出。
print(outputs)

res = torch.max(outputs)
print(res)

结果:

 

二、torch.topk()

torch.topk()返回的就是前几个最大值及对应的下标了。

格式:

         torch.max(input, k, dim, largest=True)     

  • input:一个tensor数据
  • k:指明是得到前k个数据以及其index
  • dim: 指定在哪个维度上排序, 默认是最后一个维度
  • largest:如果为True,按照大到小排序; 如果为False,按照小到大排序

例:

import torch

outputs = torch.randn(3, 5)           #模拟batchsize=3,5分类任务的输出。
print(outputs)

_, predicted = torch.topk(outputs, k=2, dim=1)   #取出每一行最大的两个值对应的索引
print(predicted)

结果:

torch.max()、torch.topk()_第3张图片

你可能感兴趣的:(11,Python/DL/ML)