Pytorch: Шум Гамбеля

Созданный на 30 янв. 2017  ·  3Комментарии  ·  Источник: pytorch/pytorch

Привет,

Я пытался добавить шум Гамбеля, как здесь , но безуспешно.
Похоже, некоторые модули все еще отсутствуют (например, основные функции переменных, такие как nn.Uniform()), или я ошибаюсь? Как бы вы реализовали в pytorch, например, следующие строки:

``` -- Создать модуль сэмпла шума ε
локальный шумовой модуль = nn.Sequential()
no iseModule:add (nn.Uniform(0, 1)) -- Образец из U(0, 1)
-- Преобразование однородной выборки в выборку Гамбеля
no iseModule:add (nn.AddConstant(1e-9, true)) -- улучшить числовую стабильность
нет iseModule: добавить (nn.Log())
нет iseModule: добавить (nn.MulConstant(-1, true))
no iseModule:add (nn.AddConstant(1e-9, true)) -- улучшить числовую стабильность
нет iseModule: добавить (nn.Log())
нет iseModule: добавить (nn.MulConstant(-1, true))

-- Создать сэмплер q(z) = G(z) = softmax((log(π) + ε)/τ) (трюк репараметризации)
локальный сэмплер = nn.Sequential()
локальный сэмплерInternal = nn.ConcatTable()
sample rInternal:add (nn.Identity()) -- Ненормализованный логарифм вероятностей log(π)
sample rInternal:add (noiseModule) -- Создать шум ε
сэмплер:добавить (samplerInternal)
сэмплер:добавить (nn.CADdTable())
self.temperature = nn.MulConstant(1 / self.tau, true) -- Температура τ для softmax
пробоотборник: добавить (собственная температура)
sampler:add (nn.View(-1, self.k)) -- Изменение размера для работы с k
сэмплер: добавить (nn.SoftMax())
sampler:add (nn.View(-1, self.N * self.k)) -- Изменить размер обратно
```

Самый полезный комментарий

Ну вот. Гораздо более читабельно и не требует модулей:

import torch.nn.functional as F
from torch.autograd import Variable

def sampler(input, tau, temperature):
    noise = torch.rand(input.size())
    noise.add_(1e-9).log_().neg_()
    noise.add_(1e-9).log_().neg_()
    noise = Variable(noise)
    x = (input + noise) / tau + temperature
    x = F.softmax(x.view(input.size(0), -1))
    return x.view_as(input)

Мы используем GitHub только для отчетов об ошибках, если у вас есть вопросы, задавайте их на наших форумах .

Все 3 Комментарий

Ну вот. Гораздо более читабельно и не требует модулей:

import torch.nn.functional as F
from torch.autograd import Variable

def sampler(input, tau, temperature):
    noise = torch.rand(input.size())
    noise.add_(1e-9).log_().neg_()
    noise.add_(1e-9).log_().neg_()
    noise = Variable(noise)
    x = (input + noise) / tau + temperature
    x = F.softmax(x.view(input.size(0), -1))
    return x.view_as(input)

Мы используем GitHub только для отчетов об ошибках, если у вас есть вопросы, задавайте их на наших форумах .

Спасибо за оперативный ответ! Обязательно в следующий раз напишу на форуме.

Спасибо за ответ!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

negrinho picture negrinho  ·  3Комментарии

cdluminate picture cdluminate  ·  3Комментарии

bartvm picture bartvm  ·  3Комментарии

SeparateReality picture SeparateReality  ·  3Комментарии

dablyo picture dablyo  ·  3Комментарии