Hola,
He estado tratando de agregar el ruido de Gumbel como aquí , pero no tuve éxito.
Parece que todavía faltan varios módulos (por ejemplo, funciones variables básicas como nn.Uniform()), ¿o me equivoco? ¿Cómo implementaría en pytorch, por ejemplo, las siguientes filas:
``` -- Crear módulo de muestra de ruido ε
módulo de ruido local = nn.secuencial()
no iseModule:add (nn.Uniform(0, 1)) -- Ejemplo de U(0, 1)
-- Transformar muestra uniforme a muestra Gumbel
no iseModule:add (nn.AddConstant(1e-9, true)) -- Mejora la estabilidad numérica
no iseModule: agregar (nn.Log())
no iseModule:add (nn.MulConstant(-1, verdadero))
no iseModule:add (nn.AddConstant(1e-9, true)) -- Mejora la estabilidad numérica
no iseModule: agregar (nn.Log())
no iseModule:add (nn.MulConstant(-1, verdadero))
-- Crear muestrario q(z) = G(z) = softmax((log(π) + ε)/τ) (truco de reparametrización)
muestra local = nn.Sequential()
muestreador local interno = nn.ConcatTable()
muestra rInternal:add (nn.Identity()) -- Probabilidades de registro no normalizadas log(π)
muestra rInternal:add (noiseModule) -- Crear ruido ε
muestreador: agregar (muestreador interno)
muestra: agregar (nn.CAddTable())
self.temperature = nn.MulConstant(1 / self.tau, true) -- Temperatura τ para softmax
sampler:añadir (temperatura propia)
sampler:add (nn.View(-1, self.k)) -- Redimensionar para trabajar sobre k
muestra: agregar (nn.SoftMax())
sampler:add (nn.View(-1, self.N * self.k)) -- Redimensionar
```
Aqui tienes. Mucho más legible y sin necesidad de módulos:
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 GitHub solo para informes de errores, si tiene preguntas, publíquelas en nuestros foros .
¡Gracias por la pronta respuesta!, y seguro, escribiré en el foro la próxima vez.
¡Gracias por la respuesta!
Comentario más útil
Aqui tienes. Mucho más legible y sin necesidad de módulos:
Estamos usando GitHub solo para informes de errores, si tiene preguntas, publíquelas en nuestros foros .