函数torch.nn.functional.softmax
具有两个参数:input
和dim
。根据其文档,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/