Привет,
Я пытался добавить шум Гамбеля, как здесь , но безуспешно.
Похоже, некоторые модули все еще отсутствуют (например, основные функции переменных, такие как 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 только для отчетов об ошибках, если у вас есть вопросы, задавайте их на наших форумах .
Спасибо за оперативный ответ! Обязательно в следующий раз напишу на форуме.
Спасибо за ответ!
Самый полезный комментарий
Ну вот. Гораздо более читабельно и не требует модулей:
Мы используем GitHub только для отчетов об ошибках, если у вас есть вопросы, задавайте их на наших форумах .