Pytorch: Gumbel-Geräusch

Erstellt am 30. Jan. 2017  ·  3Kommentare  ·  Quelle: pytorch/pytorch

Hallo,

Ich habe versucht, Gumbel-Rauschen wie hier hinzuzufügen, aber ohne Erfolg.
Sieht so aus, als würden noch einige Module fehlen (z. B. grundlegende Variablenfunktionen wie nn.Uniform()), oder irre ich mich? Wie würden Sie in Pytorch zB die folgenden Zeilen implementieren:

``` -- Rauschen erzeugen ε Beispielmodul
lokales Rauschmodul = nn.Sequential()
no iseModule:add (nn.Uniform(0, 1)) – Sample von U(0, 1)
-- Gleichförmige Probe in Gumbel-Probe umwandeln
no iseModule:add (nn.AddConstant(1e-9, true)) – Verbessert die numerische Stabilität
nein iseModule:add (nn.Log())
nein iseModule:add (nn.MulConstant(-1, true))
no iseModule:add (nn.AddConstant(1e-9, true)) – Verbessert die numerische Stabilität
nein iseModule:add (nn.Log())
nein iseModule:add (nn.MulConstant(-1, true))

-- Sampler erstellen q(z) = G(z) = softmax((log(π) + ε)/τ) (Reparametrisierungstrick)
lokaler Sampler = nn.Sequential()
lokaler SamplerInternal = nn.ConcatTable()
sample rInternal:add (nn.Identity()) -- Unnormalisierte Log-Wahrscheinlichkeiten log(π)
sample rInternal:add (noiseModule) – Erzeuge Rauschen ε
sampler:add (samplerInternal)
sampler:add (nn.CAddTable())
self.temperature = nn.MulConstant(1 / self.tau, true) – Temperatur τ für softmax
sampler:add (selbst.temperatur)
sampler:add (nn.View(-1, self.k)) – Ändere die Größe, um über k zu arbeiten
sampler:add (nn.SoftMax())
sampler:add (nn.View(-1, self.N * self.k)) – Resize back
```

Hilfreichster Kommentar

Bitte schön. Viel besser lesbar und keine Module erforderlich:

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)

Wir verwenden GitHub nur für Fehlerberichte. Wenn Sie Fragen haben, posten Sie diese bitte in unseren Foren .

Alle 3 Kommentare

Bitte schön. Viel besser lesbar und keine Module erforderlich:

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)

Wir verwenden GitHub nur für Fehlerberichte. Wenn Sie Fragen haben, posten Sie diese bitte in unseren Foren .

Danke für die prompte Antwort!, und werde beim nächsten Mal sicher im Forum schreiben.

Danke für die Antwort!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen