PyTorch Softmax с затемнением - PullRequest
       19

PyTorch Softmax с затемнением

0 голосов
/ 26 сентября 2018

К какому размеру следует применить 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.

Для результата первого софтмакса можно увидеть соответствующие элементы с суммой 1, дляпример [0.4565, 0.5435] -> 0.4565 + 0.5435 == 1.

Что означает суммирование до 1 в результате второго softmax?

Какое значение яркости выбрать?

Обновление: размер (3 , 4, 2) соответствует размеру изображения, где 3 - значение RGB, 4 - количество горизонтальных пикселей (ширина), 2 - количество вертикальных пикселей (высота).Это проблема классификации изображений.Я использую функцию кросс-энтропийной потери.Кроме того, я использую softmax в последнем слое для обратного распространения вероятностей.

1 Ответ

0 голосов
/ 26 сентября 2018

У вас есть 1x3x4x2 тензор train_dataset.Параметр dim вашей функции softmax определяет, по какому измерению выполнять операцию Softmax.Первое измерение - это размер пакета, второе - глубина, третье - строки, а последнее - столбцы.Пожалуйста, посмотрите на рисунок ниже (извините за ужасный рисунок), чтобы понять, как выполняется softmax, когда вы указываете dim как 1. enter image description here

Короче говоря, сумма каждой соответствующей записи вашего 4x2Матрицы равны 1.

Обновление: вопрос, к какому измерению должен применяться softmax, зависит от того, какие данные хранит ваш тензор, и какова ваша цель.

Обновление: Задача классификации изображений приведена в руководстве на официальном сайте pytorch.Он охватывает основы классификации изображений с Pytorch на реальном наборе данных и очень короткое руководство.Хотя этот учебник не выполняет операции Softmax, вам нужно просто использовать torch.nn.functional.log_softmax на выходе последнего полностью подключенного слоя.Смотрите MNIST классификатор с pytorch для полного примера.Не имеет значения, является ли ваше изображение RGB или градациями серого после выравнивания его для полностью связанных слоев (также имейте в виду, что тот же код для примера MNIST может не сработать для вас, зависит от того, какую версию Pytorch вы используете).

...