Pytorch: Suara gumbel

Dibuat pada 30 Jan 2017  ·  3Komentar  ·  Sumber: pytorch/pytorch

Hai,

Saya sudah mencoba menambahkan suara Gumbel seperti di sini , tetapi tidak berhasil.
Sepertinya beberapa modul masih hilang (misalnya, fungsi variabel dasar seperti nn.Uniform()), atau apakah saya salah? Bagaimana Anda menerapkan di pytorch misalnya baris berikut:

``` -- Buat noise modul sampel
noiseModule lokal = nn.Sequential()
no iseModule:add (nn.Uniform(0, 1)) -- Contoh dari U(0, 1)
-- Ubah sampel seragam menjadi sampel Gumbel
no iseModule:add (nn.AddConstant(1e-9, true)) -- Meningkatkan stabilitas numerik
tidak ada iseModule:tambahkan (nn.Log())
tidak ada iseModule:add (nn.MulConstant(-1, true))
no iseModule:add (nn.AddConstant(1e-9, true)) -- Meningkatkan stabilitas numerik
tidak ada iseModule:tambahkan (nn.Log())
tidak ada iseModule:add (nn.MulConstant(-1, true))

-- Buat sampler q(z) = G(z) = softmax((log(π) + )/τ) (trik reparametrisasi)
sampler lokal = nn.Sequential()
samplerInternal lokal = nn.ConcatTable()
sample rInternal:add (nn.Identity()) -- log probabilitas yang tidak dinormalisasi log(π)
sample rInternal:add (noiseModule) -- Membuat noise
sampler: tambahkan (samplerInternal)
sampler: tambahkan (nn.CDadTable())
self.temperature = nn.MulConstant(1 / self.tau, true) -- Suhu untuk softmax
sampler: tambahkan (self.temperature)
sampler:add (nn.View(-1, self.k)) -- Ubah ukuran agar bekerja lebih dari k
sampler: tambahkan (nn.SoftMax())
sampler:add (nn.View(-1, self.N * self.k)) -- Ubah ukuran kembali
```

Komentar yang paling membantu

Ini dia. Jauh lebih mudah dibaca dan tidak diperlukan modul:

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)

Kami menggunakan GitHub hanya untuk laporan bug, jika Anda memiliki pertanyaan, silakan posting di forum kami .

Semua 3 komentar

Ini dia. Jauh lebih mudah dibaca dan tidak diperlukan modul:

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)

Kami menggunakan GitHub hanya untuk laporan bug, jika Anda memiliki pertanyaan, silakan posting di forum kami .

Terima kasih atas jawaban yang cepat!, dan tentu saja, akan menulis di forum lain kali.

Terima kasih atas jawabannya!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat