Pythorch softmax带dim

2024-05-03 08:08:56 发布

您现在位置:Python中文网/ 问答频道 /正文

softmax应应用于哪个维度?

此代码:

%reset -f

import torch.nn as nn
import numpy as np
import torch

my_softmax = nn.Softmax(dim=-1)

mu, sigma = 0, 0.1 # mean and standard deviation

train_dataset = []
image = []
image_x = np.random.normal(mu, sigma, 24).reshape((3 , 4, 2))
train_dataset.append(image_x)

x = torch.tensor(train_dataset).float()

print(x)
print(my_softmax(x))
my_softmax = nn.Softmax(dim=1)
print(my_softmax(x))

打印如下:

tensor([[[[-0.1500,  0.0243],
          [ 0.0226,  0.0772],
          [-0.0180, -0.0278],
          [ 0.0782, -0.0853]],

         [[-0.0134, -0.1139],
          [ 0.0385, -0.1367],
          [-0.0447,  0.1493],
          [-0.0633, -0.2964]],

         [[ 0.0123,  0.0061],
          [ 0.1086, -0.0049],
          [-0.0918, -0.1308],
          [-0.0100,  0.1730]]]])
tensor([[[[ 0.4565,  0.5435],
          [ 0.4864,  0.5136],
          [ 0.5025,  0.4975],
          [ 0.5408,  0.4592]],

         [[ 0.5251,  0.4749],
          [ 0.5437,  0.4563],
          [ 0.4517,  0.5483],
          [ 0.5580,  0.4420]],

         [[ 0.5016,  0.4984],
          [ 0.5284,  0.4716],
          [ 0.5098,  0.4902],
          [ 0.4544,  0.5456]]]])
tensor([[[[ 0.3010,  0.3505],
          [ 0.3220,  0.3665],
          [ 0.3445,  0.3230],
          [ 0.3592,  0.3221]],

         [[ 0.3450,  0.3053],
          [ 0.3271,  0.2959],
          [ 0.3355,  0.3856],
          [ 0.3118,  0.2608]],

         [[ 0.3540,  0.3442],
          [ 0.3509,  0.3376],
          [ 0.3200,  0.2914],
          [ 0.3289,  0.4171]]]])

所以第一张量是在应用softmax之前,第二张量是softmax应用于dim=-1张量的结果,第三张量是softmax应用于dim=1张量的结果。

对于第一个softmax的结果,可以看到对应的元素和为1,例如[0.4565,0.5435]->;0.4565+0.5435==1。

第二个softmax的结果和1是什么?

我应该选择哪一个暗值?

更新:维度(3 , 4, 2)对应于图像维度,其中3是RGB值,4是水平像素数(宽度),2是垂直像素数(高度)。这是一个图像分类问题。我用的是交叉熵损失函数。另外,我在最后一层使用softmax来反向传播概率。


Tags: imageimportmyasnptrainnntorch
1条回答
网友
1楼 · 发布于 2024-05-03 08:08:56

您有一个1x3x4x2张量train_数据集。softmax函数的dim参数决定了在哪个维度上执行softmax操作。第一个维度是批处理维度,第二个维度是深度,第三个维度是行,最后一个维度是列。请看下面的图片(抱歉,糟糕的绘图)以了解当您指定dim为1时,softmax是如何执行的。 enter image description here

简言之,4x2矩阵的每个对应项之和等于1。

更新:问题是什么维度的softmax应该应用取决于什么数据你的张量存储,什么是你的目标。

更新:有关图像分类任务,请参见pytorch官方网站上的tutorial。它涵盖了在真实数据集上使用pytorch进行图像分类的基础知识及其非常简短的教程。尽管该教程不执行Softmax操作,但您需要做的只是对最后一个完全连接的层的输出使用torch.nn.functional.log_softmax。有关完整的示例,请参见MNIST classifier with pytorch。对完全连接的层进行展平后,图像是RGB还是灰度并不重要(还要记住,MNIST示例的相同代码可能对您不起作用,这取决于您使用的pytorch版本)。

相关问题 更多 >