Pytorch: Ruido de gumbel

Creado en 30 ene. 2017  ·  3Comentarios  ·  Fuente: pytorch/pytorch

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
```

Comentario más útil

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 .

Todos 3 comentarios

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!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

kuangliu picture kuangliu  ·  3Comentarios

miguelvr picture miguelvr  ·  3Comentarios

bartvm picture bartvm  ·  3Comentarios

a1363901216 picture a1363901216  ·  3Comentarios

bartolsthoorn picture bartolsthoorn  ·  3Comentarios