Oi,
Eu tenho tentado adicionar ruído Gumbel como aqui , mas sem sucesso.
Parece que vários módulos ainda estão faltando (por exemplo, funções básicas de variáveis como nn.Uniform()), ou estou errado? Como você implementaria em pytorch, por exemplo, as seguintes linhas:
``` -- Cria módulo de amostra de ruído ε
local noiseModule = nn.Sequential()
no iseModule:add (nn.Uniform(0, 1)) -- Amostra de U(0, 1)
-- Transforma amostra uniforme em amostra Gumbel
no iseModule:add (nn.AddConstant(1e-9, true)) -- Melhora a estabilidade numérica
não iseModule: add (nn.Log())
não iseModule:add (nn.MulConstant(-1, true))
no iseModule:add (nn.AddConstant(1e-9, true)) -- Melhora a estabilidade numérica
não iseModule: add (nn.Log())
não iseModule:add (nn.MulConstant(-1, true))
-- Cria amostrador q(z) = G(z) = softmax((log(π) + ε)/τ) (truque de reparametrização)
amostrador local = nn.Sequential()
amostrador localInternal = nn.ConcatTable()
amostra rInternal:add (nn.Identity()) -- Log de probabilidades de log não normalizado (π)
sample rInternal:add (noiseModule) -- Cria ruído ε
amostrador:adicionar (amostradorInternal)
amostrador:adicionar (nn.CAdTable())
self.temperature = nn.MulConstant(1 / self.tau, true) -- Temperatura τ para softmax
amostrador: adicionar (self.temperature)
sampler:add (nn.View(-1, self.k)) -- Redimensiona para trabalhar sobre k
amostrador:adicionar (nn.SoftMax())
sampler:add (nn.View(-1, self.N * self.k)) -- Redimensionar de volta
```
Aqui está. Muito mais legível e sem módulos necessários:
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)
Estamos usando o GitHub apenas para relatórios de bugs, se você tiver dúvidas, poste em nossos fóruns .
Obrigado pela pronta resposta!, e com certeza, escreverei no fórum da próxima vez.
Obrigado pela resposta!
Comentários muito úteis
Aqui está. Muito mais legível e sem módulos necessários:
Estamos usando o GitHub apenas para relatórios de bugs, se você tiver dúvidas, poste em nossos fóruns .