函数torch.nn.functional.softmax具有两个参数:inputdim。根据其文档,softmax操作将应用于沿指定input的所有dim切片,并将对其进行重新缩放,以使元素位于(0, 1)范围内,总和为1。

让输入为:

input = torch.randn((3, 4, 5, 6))

假设我想要以下内容,那么该数组中的每个条目都是1:
sum = torch.sum(input, dim = 3) # sum's size is (3, 4, 5, 1)

我应该如何应用softmax?
softmax(input, dim = 0) # Way Number 0
softmax(input, dim = 1) # Way Number 1
softmax(input, dim = 2) # Way Number 2
softmax(input, dim = 3) # Way Number 3

我的直觉告诉我这是最后一个,但是我不确定。英语不是我的母语,因此,along一词的使用令我感到困惑。

我对“沿”的含义不是很清楚,因此我将使用一个可以澄清问题的示例。假设我们有一个张量大小(s1,s2,s3,s4),我希望这种情况发生

最佳答案

我想让您理解的最简单方法是:假设给定了张量为(s1, s2, s3, s4)的张量,并且正如您提到的那样,您希望沿最后一个轴的所有项的总和为1。

sum = torch.sum(input, dim = 3) # input is of shape (s1, s2, s3, s4)

然后,应将softmax调用为:
softmax(input, dim = 3)

为了易于理解,您可以将(s1, s2, s3, s4)形状的4d张量视为(s1*s2*s3, s4)形状的2d张量或矩阵。现在,如果您希望矩阵在每一行(轴= 0)或列(轴= 1)中包含总计为1的值,则可以简单地在2d张量上调用softmax函数,如下所示:
softmax(input, dim = 0) # normalizes values along axis 0
softmax(input, dim = 1) # normalizes values along axis 1

您可以看到Steven在他的answer中提到的示例。

关于python - Pytorch softmax : What dimension to use?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49036993/

10-12 21:22