簡體   English   中英

帶有暗淡的 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 的哪個維度的問題取決於您的張量存儲什么數據,以及您的目標是什么。

更新:圖片分類任務請參考pytorch官網教程 它涵蓋了在真實數據集上使用 pytorch 進行圖像分類的基礎知識及其非常簡短的教程。 雖然那個教程沒有執行 Softmax 操作,但你需要做的只是在最后一個全連接層的輸出上使用torch.nn.functional.log_softmax 有關完整示例,請參閱 帶有 pytorch 的 MNIST 分類器 在為完全連接的層展平后,您的圖像是 RGB 還是灰度無關緊要(還要記住,MNIST 示例的相同代碼可能不適合您,這取決於您使用的 pytorch 版本)。

對於大多數深度學習問題,我們肯定會批量處理。 所以dim永遠是1。不要混淆。通過我們只是說函數對每個批次的內容進行操作(這里是一個向量,即如果你有8個類,8個元素將在那里每一行)。 您也可以提及 dim=-1 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM