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
```
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!
Commentaire le plus utile
Voici. Beaucoup plus lisible et aucun module requis :
Nous utilisons GitHub uniquement pour les rapports de bugs, si vous avez des questions, veuillez les poster sur nos forums .