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以反向传播概率 .
1 回答
你有1x3x4x2张量train_dataset . softmax函数的dim参数决定了执行Softmax操作的维度 . 第一个维度是批量维度,第二个维度是深度,第三个是行,最后一个是列 . 请查看下面的图片(抱歉可怕的绘图),了解当你指定dim为1时softmax的执行方式.
简而言之,4x2矩阵的每个相应条目的总和等于1 .
更新:应该应用softmax的哪个维度取决于张量存储的数据,以及您的目标是什么 .
更新:有关图像分类任务,请参阅官方pytorch网站上的tutorial . 它涵盖了在真实数据集上使用pytorch进行图像分类的基础知识,以及一个非常简短的教程 . 虽然该教程不执行Softmax操作,但您需要做的是在最后一个完全连接的层的输出上使用torch.nn.functional.log_softmax . 有关完整示例,请参阅MNIST classifier with pytorch . 在将图像展平为完全连接的图层后,图像是RGB还是灰度并不重要(同时请记住,MNIST示例的相同代码可能对您不起作用,取决于您使用的pytorch版本) .