带暗淡的 PyTorch softmax
PyTorch softmax with dim
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 来反向传播概率。
你有一个 1x3x4x2 张量 train_dataset。您的 softmax 函数的 dim 参数决定了在哪个维度上执行 Softmax 操作。第一个维度是您的批次维度,第二个是深度,第三个是行,最后一个是列。请查看下图(抱歉,画得太糟糕了),了解当您将 dim 指定为 1 时 softmax 是如何执行的。
简而言之,您的 4x2 矩阵的每个对应项的总和等于 1。
更新:softmax应该应用哪个维度的问题取决于你的张量存储什么数据,以及你的目标是什么。
更新:对于图像分类任务,请参阅tutorial on official pytorch website. It covers basics of image classification with pytorch on a real dataset and its a very short tutorial. Although that tutorial does not perform Softmax operation, what you need to do is just use torch.nn.functional.log_softmax on output of last fully connected layer. See MNIST classifier with pytorch以获取完整示例。在将图像展平为完全连接的层后,无论您的图像是 RGB 还是灰度都没有关系(还要记住,MNIST 示例的相同代码可能不适合您,具体取决于您使用的 pytorch 版本)。
对于大部分的深度学习问题,我们一定会批出的。所以 dim 将始终为 1。不要与 it.Through 混淆,我们只是说函数对每个批次的内容进行操作(这里它是一个向量,即如果你有 8 类,每行将有 8 个元素)。你也可以提到 dim=-1 。
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 来反向传播概率。
你有一个 1x3x4x2 张量 train_dataset。您的 softmax 函数的 dim 参数决定了在哪个维度上执行 Softmax 操作。第一个维度是您的批次维度,第二个是深度,第三个是行,最后一个是列。请查看下图(抱歉,画得太糟糕了),了解当您将 dim 指定为 1 时 softmax 是如何执行的。
简而言之,您的 4x2 矩阵的每个对应项的总和等于 1。
更新:softmax应该应用哪个维度的问题取决于你的张量存储什么数据,以及你的目标是什么。
更新:对于图像分类任务,请参阅tutorial on official pytorch website. It covers basics of image classification with pytorch on a real dataset and its a very short tutorial. Although that tutorial does not perform Softmax operation, what you need to do is just use torch.nn.functional.log_softmax on output of last fully connected layer. See MNIST classifier with pytorch以获取完整示例。在将图像展平为完全连接的层后,无论您的图像是 RGB 还是灰度都没有关系(还要记住,MNIST 示例的相同代码可能不适合您,具体取决于您使用的 pytorch 版本)。
对于大部分的深度学习问题,我们一定会批出的。所以 dim 将始终为 1。不要与 it.Through 混淆,我们只是说函数对每个批次的内容进行操作(这里它是一个向量,即如果你有 8 类,每行将有 8 个元素)。你也可以提到 dim=-1 。