Pytorch: Bruit de gomme

Créé le 30 janv. 2017  ·  3Commentaires  ·  Source: pytorch/pytorch

Salut,

J'ai essayé d'ajouter du bruit Gumbel comme ici , mais sans succès.
Il semble que plusieurs modules manquent encore (par exemple, des fonctions variables de base telles que nn.Uniform()), ou est-ce que je me trompe ? Comment implémenteriez-vous dans pytorch, par exemple, les lignes suivantes :

``` -- Créer un module d'échantillon de bruit ε
module de bruit local = nn.Sequential()
no iseModule:add (nn.Uniform(0, 1)) -- Échantillon de U(0, 1)
-- Transformer un échantillon uniforme en échantillon Gumbel
no iseModule:add (nn.AddConstant(1e-9, true)) -- Améliore la stabilité numérique
non iseModule:add (nn.Log())
non iseModule:add (nn.MulConstant(-1, true))
no iseModule:add (nn.AddConstant(1e-9, true)) -- Améliore la stabilité numérique
non iseModule:add (nn.Log())
non iseModule:add (nn.MulConstant(-1, true))

-- Créer un échantillonneur q(z) = G(z) = softmax((log(π) + ε)/τ) (astuce de reparamétrisation)
échantillonneur local = nn.Sequential()
échantillonneur localInterne = nn.ConcatTable()
sample rInternal:add (nn.Identity()) -- Probabilités logarithmiques non normalisées log(π)
sample rInternal:add (noiseModule) -- Créer du bruit ε
échantillonneur : ajouter (échantillonneur interne)
échantillonneur : ajouter (nn.CAddTable())
self.temperature = nn.MulConstant(1 / self.tau, true) -- Température τ pour softmax
sampler:add (self.temperature)
sampler:add (nn.View(-1, self.k)) -- Redimensionner pour travailler sur k
échantillonneur : ajouter (nn.SoftMax())
sampler:add (nn.View(-1, self.N * self.k)) -- Redimensionner en arrière
```

Commentaire le plus utile

Voici. Beaucoup plus lisible et aucun module requis :

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)

Nous utilisons GitHub uniquement pour les rapports de bugs, si vous avez des questions, veuillez les poster sur nos forums .

Tous les 3 commentaires

Voici. Beaucoup plus lisible et aucun module requis :

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)

Nous utilisons GitHub uniquement pour les rapports de bugs, si vous avez des questions, veuillez les poster sur nos forums .

Merci pour la réponse rapide!, et bien sûr, j'écrirai sur le forum la prochaine fois.

Merci d'avoir répondu!

Cette page vous a été utile?
0 / 5 - 0 notes